Найти тему
Алексей Додонов

Кастомные типы в 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 это глобальная переменная, которая определяет из каких символов будет состоять название параметра:

  1. буквы a-z и A-Z
  2. 0-9
  3. а также символы _ и -

Теперь надо определить регулярку, с помощью которой будем парсить 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 это:

  1. фреймворк для роутинга со 100% покрытием кода;
  2. 10.0 баллов на scrutinizer-ci.com
  3. роутер является частью проекта Mezon

Репа на github.com: https://github.com/alexdodonov/mezon-router

Будет здорово, если вы поучаствуете в жизни проекта. Это может быть написание документации, рекомендации друзьям в социальных сетях, правка багов, рефакторинг, или даже запрос тикета на новую функциональность. В любом случае большое спасибо.