Главное Авторские колонки Вакансии Образование
Выбор редакции:
254 0 В избр. Сохранено
Авторизуйтесь
Вход с паролем

Mezon Router: middleware и модификация параметров

Используя middleware, вы сможете модифицировать стандартные параметры $route и $parameters во что-то совершенно отличное. При этом middleware будет вызываться перед обработкой роута.
Мнение автора может не совпадать с мнением редакции

При этом есть ряд правил:

  • глобальные middleware будут вызываться в порядке их добавления;
  • специфичные для конкретного роута middleware так же будут вызываться в порядке их добавления.

Порядок вызова:

  • сначала будут вызываться глобальные middleware — $router->addRoute(’*’, ...);
  • потом будут вызываться специфичные для роута.

Давайте посмотрим на пример:

$router = new Router(); $router->addRoute("/user/[i:id]", function(string $route, array $parameters){ $userModel = new UserModel(); $userObject = $userModel->getUserById($parameters['id']); // используем далее $userObject по своему усмотрению });

А теперь пример со всеми возможностями:

$router = new Router(); // Первый шаг. У нас есть API, которое принимает JSON в теле запроса $router->registerMiddleware('*', function (string $route, array $parameters){ $request = Request::createFromGlobals(); $parameters['_request'] = $request; $parameters['_body'] = json_decode($request->getContent(), true); return $parameters; }); // Второй шаг. Убеждаемся, что мы авторизованы $router->registerMiddleware('*', function (string $route, array $parameters){ // Это публичная зона if (mb_strpos($route, '/user') !== 0 || empty($parameters['user_id'])) { return $parameters; } $token = $parameters['_request']->headers->get('oauth_token'); $auth = new SomeAuth(); $auth->validateTokenOrFail( $token, $parameters['user_id'] ); // Нет нужды возвращать что-либо }); // Последний шаг. Теперь мы модифицируем параметры, чтобы обработчик роута мог с ними работать $router->registerMiddleware('/user/[i:user_id]', function(string $route, array $parameters){ $userModel = new UserModel(); return $userModel->getUserById( $parameters['user_id'] ); }); // Последний момент. Middleware мы добавили и теперь можем обрабатывать роут $router->addRoute('/user/[i:user_id]', function (UserObject $userObject){ // Do everything });

Что такое Mezon Router?

mezon/router это:

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

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

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

0
В избр. Сохранено
Авторизуйтесь
Вход с паролем
Комментарии
Выбрать файл
Не пропустите публикацию!
Mezon
Блог проекта
Расскажите историю о создании или развитии проекта, поиске команды, проблемах и решениях
Написать
Личный блог
Продвигайте свои услуги или личный бренд через интересные кейсы и статьи
Написать

Spark использует cookie-файлы. С их помощью мы улучшаем работу нашего сайта и ваше взаимодействие с ним.