Роутинг в 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 указывается относительно текущей директории. Путь может содержать переменные в фигурных кавычках {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.
Чтобы получить преобразование переменной, в случае не использования 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