MVC компонент

Роутинг

Роутинг в Core наряду с упомянутыми в Skeleton application контроллерами - можно использовать дополнительно классический роутинг.

Роутинг является окончательной заглушкой. Роутинг внутри роутинга использовать нельзя.

На любом уровне проиложения - вы разбрасываете условия окончательного пути url относительно данной страницы и указываете куда будет направлено дальнейшее выполнение скрипта, на какую страницу и какую функцию страницы, а также условия при которых этот роутинг будет срабатывать.

Параметры маршрута

Маршрут регистрируется функцией

c\mvc::r($params,$default_params=array());

Параметры можно передавать как обычным массивом, так и указанием значениями по умолчанию. Приоритет у обычных значений. Дополнительно параметры можно обозначить в общем массиве для приложения для всех роутов.

c\mvc::r(array(
  //base
    'dir'=>__DIR__,
  // alias
    'as'=>'article_edit',
  //where condition
    'method'=>array('get','post'),
    'domain'=>'core.kosmom.ru',
    'is_ajax'=>null,
    'scheme'=>'http',
    'url'=>'article/{page}/{act|create}-{test}',
  // action
    'page'=>'_article',
    'callback'=>'test_function',
));

Регистрируется маршрут и тут же проверяется на условие совпадения. В случае совпадения - маршрут ставит отметку, что он сработал и после окончания обработки файла - скрипт будет копать по пути найденного маршрута.

Каждый маршрут должен содержать ссылку на итоговый файл 'dir'. Можно задать ссылку в начале файла для всех маршрутов при помощи обращения к глобальной директиве

c\core::$data['r']['dir']=__DIR__;

Условие проверяется по обязательному указанию маршрута url и дополнительным параметрам method - метод опроса, domain - домен (можно настроить отдельные маршруты для множества поддоменов), is_ajax - отделить аяксовый маршрут от обычного, scheme - построить отдельные маршруты для http и https схем.

Правила формирования URL пути

Путь url указывается относительно текущей директории. Путь может содержать переменные в фигурных кавычках {var}, также дополнительно через разделитель | может быть указано значение по умолчанию {var|default}

Совпадение условий

При совпадении всех условий - страница будет перенаправлена на параметр page относительно данной директории. Если указан параметр callback - дополнительно будет вызвана одноименная функция с передачей всех аргументов в указаном URL

Если page не указан - callback будет выполнен после прохождения всех страниц перед прорисовкой.

Указание параметров

Заранее, до вызова роутов - можно указать плейсхолдеры для переменных. Каждая переменная при совпадении - дополнительно будет проверяться на условия, а также будет преобразовываться перед вызовом функции

Переменные регистрируются на глобальном уровне

c\mvc::$route_placeholder['claim']=array(
	'default'=>1,
	'regexp'=>'[0-9]*',
	'validate'=>array(
		array('type'=>'maxlength','value'=>5)
	),
	'filter'=>'lower',
	'fill'=>function($id){
	$sql="SELECT * from claim where c_id=:id";
		return c\db::ea1($sql,array('id'=>$id));
	}
);

В данном случае все переменные с маркировкой {claim} - должны соответствовать маске [0-9]*, указаной в regexp, удовлетворять условиям, описаным в validate. Можно также дополнительно указывать значение по умолчанию default, чтобы не прописывать её в каждом адресе пути.

В функию будет передано значение, обработанное фильтром filter и преобразованное через функцию fill.

Поведение на странице page

Чтобы получить преобразование переменной, в случае не использования callback функции - на странице перехода можно использовать метод

c\mvc::getParamFromRoute($var_name=null);

Функция вернет указаное значение переменной или всех переменных в виде массива, если не передать название.

Чтобы определить каким именно маршрутом скрипт попал сюда - можно использовать метод

c\mvc::getRoute();

Метод вернет название as маршрута.

Что бы определить был ли найден хотя бы один маршрут - используется метод

c\mvc::isRouteMatch();

Обработка переменной без совпадения маршрута

Вы можете обработать плейсхолдером абсолютно любое значение, не обязательно чтобы оно было связано с маршрутами. Таким образом можно единожды описав механизм получения дополнительных параметров по ключу - использовать его для всех связаных сущностей. Для всего этого существует функция

c\mvc::routeFill($var_name,$value);

Направления по маршрутам

Роутинги позволяют составлять ссылки и редиректы, ссылаясь на название маршрута as.

Для этого используются методы

c\mvc::getUrlFromRoute($route_name,$params=array());
c\mvc::redirectToRoute($route_name,$params=array(),$header=302);

При использовании роутинга - содержание страницы будет показано по аналогии с controller_page в месте шаблона, где указано

<?include c\mvc::viewPage()?>

Создано при помощи сервиса Core CMS