Использование посредников middleware для выноса повторяющегося инфраструктурного кода из контроллеров. Очистка ввода и централизованная обработка доменных исключений.
- 00:00:22 Дублирование парсинга JSON
- 00:03:41 Философия middleware
- 00:06:01 Подключения BodyParsingMiddleware
- 00:07:55 Порядок подключения в Slim
- 00:09:21 Упрощение контроллера
- 00:09:56 Автоочистка пробелов из ввода
- 00:15:06 Очистка пустых файлов
- 00:18:51 DomainExceptionHandler для доменных исключений
- 00:23:20 Логирование доменных ошибок
- 00:26:40 Тесты подтверждения токена
- 00:29:03 Контроллер подтверждения регистрации
- 00:31:08 Отсутствие удобной валидации ввода
Скрытый контент (код, слайды, ...) для подписчиков.
Открыть →Чтобы не пропускать новые эпизоды подпишитесь на наш канал @deworkerpro в Telegram
Спасибо.
Добрый день.
А как быть с middleware, если мне надо для какого - то опредленного контроллера добавить что - то специфическое? Какую - то дополнительную обработку.
И еще вопрос - Вот получили мы запрос в коноллере и ручками теперь собираем все в команду. А можно как - то автоматизировать данный процесс? Допустим, есть такие вещи, как JmsSerializer или подобный пакет от Симфони, можно данные вещи использовать для заполнения команды? Оно там даже должно немного ругать на неверно заполненные поля. Ведь бывают ситуации, когда с фронта приходит не 2 поля а 10 -15 , а то и 35 (если есть большая бизнес логика).
Если для определённого, то привязывем через
add()
напрямую к маршруту или группе:Да, можно автоматизировать заполнение через symfony/serializer.
Здравствуйте Дмитрий, спасибо как всегда и вопрос, а в Симфони такое можно сделать только через EventSubscriberInterface и отлавливать kernel request я правильно понимаю?
или есть возможность упростить там? Спасибо!
Да, там нет middleware. Только через подписку на события
kernel.controller
иkernel.exception
.Допустим, у нас возникла острая необходимость все-таки оставить значение одного из параметров запроса неизменным и не применять к нему мидлвар
ClearEmptyInput
(например, вводимый пользователь пароль может содержать пробел в любом месте). Как лучше всего поступить в данном случае, чтобы не вычеркивать мидлварClearEmptyInput
из общего списка обработчиков в/api/config/middleware.php
?Мой вариант:
1) Создать объект, например,
ClearEmptyInputRules
, который содержит правила исключения параметров запроса из обработки: методexcept
будет добавлять исключение, а методcheck
проверять запрос на то, можно ли к нему применить фильтрацию2) В конфигах контейнера зависимостей вписать необходимые нам правила (например, в файл
/api/config/common/inputFilters.php
)3) Добавить в класс
ClearEmptyInput
зависимость отClearEmptyInputRules
(Код писал не самым оптимальным образом - скорее, чтоб он был наглядным)
Я в правильном направлении думаю?
Да, можно по-разному:
$except
(как сделано в Laravel) или$rules
как у вас прямо в middleware.Я заметил, что вы много где используете приватные статичные методы и потом обращаетесь к ним через self. Не могу понять в чем тут выигрыш перед обычными приватными методами и this. Подскажите пожалуйста.
Обычный динамический метод привязан к каждому экземпляру объекта
$this
.Статический же - это по сути просто функция, записанная в классе.
Так что если нам нужна функция, которой не нужен сам текущий объект
$this
, то нет особого смысла её делать динамическим методом.Добрый день.
Как правильнее будет реализовать функционал похожего DomainExceptionHandler, в случае если я хочу выводить slim flash, в котором просто нужно отловить ошибку, записать эту ошибку в сессию, и дальше выполнить все остальные действия в Action, отобразив при этом в рендере уже просто ошибку из сессии?
Такой DomainExceptionHandler получится сделать только в API. Если же рендерятся представления с формой, то тогда придётся всё оборачивать в try-catch и заполнять сессию вручную. Например, в Symfony так:
понял, спасибо большое
Или войти через: