Кастомные типы в Mezon Router
В одной из последних версий роутера такая возможность появилась. Давайте в качестве примера попробуем сделать катомный тип «дата».
Для этого создадим следующий простой класс:
class DateRouterType { /** * Method returns regexp for searching this entity in the URL * * @return string regexp for searching */ public static function searchRegExp(): string { return '([date:'.BaseType::PARAMETER_NAME_REGEXP.'])'; } }Здесь у нас BaseType::PARAMETER_NAME_REGEXP это глобальная переменная, которая определяет из каких символов будет состоять название параметра:
- буквы a-z и A-Z
- 0-9
- а также символы _ и -
Теперь надо определить регулярку, с помощью которой будем парсить URL:
public static function parserRegExp(): string { // pretty simple regexp return '([0-9]{4}-[0-9]{2}-[0-9]{2})'; }И теперь где-то в ваших файлах конфигурации надо написать следующее:
$router->addType('date', DateRouterType::class);Теперь все готово для обработки роутов типа таких: /some-url-part/2020-02-02/ending-part/ /posts-for-2020-02-02/
Но будьте осторожны. Например, у вас есть следующие роуты:$router->addRoute('/posts-for-[date:posts-date]/', function(UserObject $userObject){ // some activities here }); $router->addRoute('/[s:some-url/', function(UserObject $userObject){ // some activities here });
Тут первый роутер будет использоваться для обработки УРЛа /posts-for-[date:posts-date]/
Что такое Mezon Router?
mezon/router это:
- фреймворк для роутинга со 100% покрытием кода;
- 10.0 баллов на scrutinizer-ci.com
- роутер является частью проекта Mezon
Репа на github.com: https://github.com/alexdodonov/mezon-router