Size: a a a

2021 March 29

AM

Artem Molotov in PHP
Павел Г.
Мне кажется у вас слишком много снаружи хэндлера оказывается :(
Т.е.?
источник

VS

Vladyslav Serednyako... in PHP
Artem Molotov
> И как передать если роутер срабатывает после раннера?

Должно быть наоборот, если кейс не специфичный. Т.е.  сначала роутер смотрит какой екшен нужно запустить, потом передаёт эту задачу раннеру и уже раннер запускает этот екшен.
Раннер требует для запуска хендлер первым аргументом, те без хендлера не запустить раннер(
источник

ПГ

Павел Г. in PHP
Ну т.е. у вас где то еще до хэндлера определяется роутер, он определяет какой хэндлер запустить.
источник

AM

Artem Molotov in PHP
Vladyslav Serednyakov
Раннер требует для запуска хендлер первым аргументом, те без хендлера не запустить раннер(
Да, это так. Но кто вас заставляет трогать раннер до роутера?
источник

VS

Vladyslav Serednyako... in PHP
Artem Molotov
Да, это так. Но кто вас заставляет трогать раннер до роутера?
Emmiter)
источник

AM

Artem Molotov in PHP
Павел Г.
Ну т.е. у вас где то еще до хэндлера определяется роутер, он определяет какой хэндлер запустить.
Ну да. Так реализовано как минимум в Mezzio. Не понимаю, почему должно быть наоборот (исключая ситуации, когда один хендлер внутри запускает ещё один)
источник

AM

Artem Molotov in PHP
Vladyslav Serednyakov
Emmiter)
Каким образом?
источник

ПГ

Павел Г. in PHP
Artem Molotov
Ну да. Так реализовано как минимум в Mezzio. Не понимаю, почему должно быть наоборот (исключая ситуации, когда один хендлер внутри запускает ещё один)
Ну may be, не троггал данный фреймворк.
источник

VS

Vladyslav Serednyako... in PHP
Artem Molotov
Ну да. Так реализовано как минимум в Mezzio. Не понимаю, почему должно быть наоборот (исключая ситуации, когда один хендлер внутри запускает ещё один)
Это мидлверный зенд, там вроде нет экшнов)
источник

VS

Vladyslav Serednyako... in PHP
Artem Molotov
Каким образом?
Раннер требует заполнить все аргументы в том числе и Emmiter, что бы вконце дернуть $runner->run();
run дергает EmmitStack получает emmiter и вызывает у него emit что бы запустить эту всю цепочку http.
источник

AM

Artem Molotov in PHP
Vladyslav Serednyakov
Это мидлверный зенд, там вроде нет экшнов)
Екшены есть везде. Только именуются по разному.

Емиттер передаётся в раннер, а раннер нужно запускать после роутера. Т.е. в такой схеме емиттер никак не мешает. Всё что вам нужно, это запустить роутер и получить от него строку с классом, который имплементит ServerRequestHandler. Потом через контейнер получаете объект этого класса и передаёте его первым аргументмо в раннер и он успешно запустит этот класс с методом handle.
источник

AM

Artem Molotov in PHP
Строго говоря, вот так:
$class = $router->find($uri);
$requestHandler = $container->get($class);

$requestHandlerRunner = new RequestHandlerRunner($requestHandler, ..., ..., ...);

$requestHandlerRunner->run();
источник

AM

Artem Molotov in PHP
и всё. Никаких проблем.
источник

AM

Artem Molotov in PHP
Это если без мидлварок
источник

VS

Vladyslav Serednyako... in PHP
Artem Molotov
Екшены есть везде. Только именуются по разному.

Емиттер передаётся в раннер, а раннер нужно запускать после роутера. Т.е. в такой схеме емиттер никак не мешает. Всё что вам нужно, это запустить роутер и получить от него строку с классом, который имплементит ServerRequestHandler. Потом через контейнер получаете объект этого класса и передаёте его первым аргументмо в раннер и он успешно запустит этот класс с методом handle.
Я не адепт MVC конечно, но как быть с контроллерами, те делать логику определения экшена в контроллере какой-то зашквар.
Отсюда мысль сделать специальный Handler который бы прнимал принимал разные контроллеры и экшены как callable, closure, те универсальный хенндлер резолвер, а еще лучше сделать такой хендлер в роутере благо у меня свой роутинг на psr.
источник

AM

Artem Molotov in PHP
Vladyslav Serednyakov
Я не адепт MVC конечно, но как быть с контроллерами, те делать логику определения экшена в контроллере какой-то зашквар.
Отсюда мысль сделать специальный Handler который бы прнимал принимал разные контроллеры и экшены как callable, closure, те универсальный хенндлер резолвер, а еще лучше сделать такой хендлер в роутере благо у меня свой роутинг на psr.
От того, что екшены будут в отдельных файлах, а не в одном — ничего по сути не изменится. Контроллер — это не класс с суфиксом Controller
источник

AM

Artem Molotov in PHP
Artem Molotov
От того, что екшены будут в отдельных файлах, а не в одном — ничего по сути не изменится. Контроллер — это не класс с суфиксом Controller
Точнее изменится, но даже в лучшую сторону. :)
источник

VS

Vladyslav Serednyako... in PHP
Artem Molotov
От того, что екшены будут в отдельных файлах, а не в одном — ничего по сути не изменится. Контроллер — это не класс с суфиксом Controller
Ладно я нашел у phpleague роутера, там у них есть в роутере handle который дергает dispatch, сделаю Handler с резолвом экшенов и контроллеров, с мидварами.
источник

AM

Artem Molotov in PHP
Vladyslav Serednyakov
Ладно я нашел у phpleague роутера, там у них есть в роутере handle который дергает dispatch, сделаю Handler с резолвом экшенов и контроллеров, с мидварами.
А у них там тоже самое, в принципе
источник

AM

Artem Molotov in PHP
источник