Сомневаюсь, что эта фича будет широко востребована и толпы программистов ринутся писать кучу своих кастомных типов. Но дать людям такую возможность надо, поэтому погнали.
В одной из последних версий роутера такая возможность появилась. Давайте в качестве примера попробуем сделать катомный тип «дата».
Для этого создадим следующий простой класс:
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