Использование middleware в php

AmdY

Пью пиво
Команда форума
с архитектруной точки зрения как раз лучше вариант cat | grep, так как любую утилиту в последствии можно заменить
 

флоппик

promotor fidei
Команда форума
Партнер клуба
с архитектруной точки зрения как раз лучше вариант cat | grep, так как любую утилиту в последствии можно заменить
да и семантически лучше читается. Да, лишний процесс создатся, но потери от этого маржинальны.
 

AnrDaemon

Продвинутый новичок
Заменить на что?… Было бы что и на что заменять.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@AnrDaemon, ну вообще-то я имел в виду именно твое замечание на
cat /something | grep foo | grep bar
, потому как я вот часто пишу 3-4 грепа, потому как писать регулярку, мне если честно впадлу для разбора простых строк в логах. Либо я не понял, что ты имел в виду, когда писал
 

fixxxer

К.О.
Партнер клуба
с архитектруной точки зрения как раз лучше вариант cat | grep, так как любую утилиту в последствии можно заменить
Можно писать (по крайней мере, в bash):

PHP:
< /path/to/smth grep foo
Точно так же легко менять, короче, и нет лишнего cat-а.
 

Вурдалак

Продвинутый новичок
Я нередко пишу «cat foo.txt | ...», потому что сначала думаю о том, в каком именно файле буду искать, а только потом думаю над фильтрами.
 

hell0w0rd

Продвинутый новичок
НЕправильно использовать cat, когда он не нужен. А не "неправильно использовать множественные пайпы".
Возможно, PHP код будет более понятен?
cat | grep
PHP:
while($row = fetch($db)) $result[] = $row;
foreach($result as $row) …;
А это разве корректно? cat читает в память весь файл?
Вроде это как раз отличная черта cat, он читает чанками и сразу выплевывает.
Заменить на что?… Было бы что и на что заменять.
Гм. На awk, на пример.
 

fixxxer

К.О.
Партнер клуба
Что б тебе всю жизнь на перле писать.
Ну а чо, вполне компромиссный вариант - семантично на вид, и без cat-а =)

Сам я, конечно, cat-ы пишу и не жужжу - какая разница? Это вопрос из разряда двойных кавычек, только еще глупее - речь идет ведь в основном об одноразовых командах.
 

Yoskaldyr

"Спамер"
Партнер клуба
Подниму тему.

Кто как обменивается данными между middleware? Например middleware для старта сессии и получение сессии в других middleware или проверка Csrf

В данный момент что я видел:
1. передают как дополнительные поля response/request (не нравится тем что смешивается объекты запроса/ответа с напрямую не связанной с ними логикой)
2. используют статику например как здесь (аналогично использованию глобальных переменных да и вообще не люблю статику использовать без крайней необходимости)
3. инжектят $app или другой контейнер во все миддлвари в которых необходим обмен данными, например так в ларавеле делают (практически аналогично предыдущему пункту).

Т.е. если говорить о полностью независимых от приложения middleware, то да они должны работать только с объектами запроса и ответа и те же сгенерированные Csrf токены автоматически вставляться во все формы найденные в теле ответа (регулярками или еще как). Например именно так работает эта реализация csrf middleware.
Но если использовать middleware для компоновки частей приложения то обмен между ними явно необходим (например, различные сессии или проверки для различных частей сайта, более умная вставка Csrf токенов на этапе генерации текста страницы а не после)
 
Последнее редактирование:

Adelf

Administrator
Команда форума
инжектить зависимость, которая в IoC-контейнере настроена как синглтон. То самое, правильное, использование паттерна синглтон.
 

fixxxer

К.О.
Партнер клуба
Если это чистое состояние в результате работы предыдущих мидлварей, и логически относится именно к процессингу реквеста мидлварями (а не к сессии, авторизации итд) - то скорее по цепочке: в middlewares аргументом передается контекст, которым может быть что угодно, не обязательно голый реквест. (Мне, кстати, не нравится, что там стандартно ходит реквест, лучше бы был какой-нибудь RequestContext).

Правда, с такой необходимостью не сталкивался. Обычно там работа с какими-то сервисами. А это, конечно, через инъекцию.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
инжектить зависимость, которая в IoC-контейнере настроена как синглтон. То самое, правильное, использование паттерна синглтон.
я бы назвал это экспертным мнением, которое другие могут разделять не полностью
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
в Slim сделали хак: все на лямбдах, которые аттачатся к контейнеру, поэтому контейнер - $this, без инъекций
 

Yoskaldyr

"Спамер"
Партнер клуба
в Slim сделали хак: все на лямбдах, которые аттачатся к контейнеру, поэтому контейнер - $this, без инъекций
Не смотрел внутренности слима как именно реализовали. А оказалось просто супер! А если лямбда изначально использует контекст своего класса, а не просто анонимная функция как в примерах слима, то получается именно как я хотел и без излишних конфигураций для контейнера и мидлварь остается отдельным классом. Правда немного переписать middleware dispatcher для ленивой загрузки в таких случаях, но это совсем не проблема.
 
Сверху