[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PSR-7
Страницы: 1, 2, 3, 4, 5, 6, 7
Ron
Цитата (Arh @ 19.12.2017 - 22:30)
ведь мы можем вернуть только response, как следующему обработчику передать свой request?

Обычно, если возвращается объект Response то это сигнал ядру системы - прекратить выполнение последующих смстем/компонентов/цепочек (чего угодно) и перейти непосредственно к процессу передачи ответа клиенту. То есть к завершающей фазе, нечто вроде GoTo.

Для передачи информации между RR обработчиками, например в HTTP Foundation используется специальное свойство объекта Request. Вот так просто, да. =)

Зачем "подменять" Request, создай новый и запусти с ним $kernel->handle() с доп. параметром (или что там у тебя), subrequest называется. Это в случае когда речь идет о необходимости замены свойств, что должны оставаться иммутабельными.
twin
Цитата (Arh @ 19.12.2017 - 18:30)
но потом начал натыкаться на psr-7, думал они что то решили как то, а в итоге ничего нового, всё та же древняя идея, всё те же древние проблемы в новой обёртке. Всё новое это хорошо забытое старое)

PSR-7, это абстракция над HTTP, и к мидлварам имеет весьма опосредствованное отношение. Другими словами, этот "стандарт" регламентирует объекты Request и Response, а мидлвары ты можешь писать как угодно. Можешь вообще не писать. Допустим в Slim используют три аргумента, передавая третьим следующий мидлвар. Если тебе хочется передать их массивом - ни кто возражать не станет. Важно не как ты их передаешь, а как они устроены, объекы Request и Response.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Arh
twin
А, ок. Значит меня ввели в заблуждение какие то статьи про psr 7.

Ron
Цитата
Обычно, если возвращается объект Response то это сигнал ядру системы - прекратить выполнение последующих смстем/компонентов/цепочек

Подождите, подождите.
Если будем останавливать цепочку после первого мидлвара, тогда какие это мидлвары, если в итоге срабатывает только первый.

Замыкать цепь должен либо последний, либо замыкающий. Замыкающий можно например как то настройками указать, что его ответ в любом случае последний, обрывающий (если он что то ответил).

Тогда можно например последним поставить мидлвар, который берёт ответ предыдущих и кеширует, а первым поставить который смотрит есть ли кеш по такому запросу и если есть, то возвращает ответ и обрывает цепь.

Цитата
Для передачи информации между RR обработчиками, например в HTTP Foundation используется специальное свойство объекта Request. Вот так просто, да. =)

Эту строчку не понял. HTTP Foundation это что то из симфони?
То есть там есть глобальное свойство Request, и если в мидлваре нужно получить ответ от другой цепочки, тогда нужно на глобальном уровне подменять Request? В общем непонятно что ты имеешь ввиду.
То что я написал "По началу между ними ничего не передавал, тогда всё на статике писал и обмен данными был через статические свойства.". Это ты своими словами написал?


Цитата
Зачем "подменять" Request

Да мало ли. От клиента пришли какие то данные, с которыми работают милдвары. Например когда к тебе заходят боты, допустим они приходят с заголовком isBot: true, и все приложения как то на него реагируют, а бот какого нить спутынка приходит с заголовком yaBot: da.
В током случае можно в начало поставить мидлвар, который при наличии yaBot: da; добавляет isBot: true, и не надо это условие копипастить по всей системе.

Цитата
Зачем "подменять" Request, создай новый и запусти с ним $kernel->handle()

А как я создам новый, если я не знаю всего что там пришло, мне нужно только одно свойство подменить.

Цитата
что должны оставаться иммутабельными

Зачем? Это же всё перечёркивает. Зачем тогда вся эта абстракция. Мы по сути имеем тот же глобальный $_POST, только теперь он ещё и в константе. Так что ли?

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Ron
Arh, слушай, да я не знаю, у меня таких проблем не бывает, никогда причем. Поэтому не понимаю чего хочешь, попытался, но, очевидно, не угадал. wink.gif

HTTP Foundation, да, это Symfony и там в качесвте DTO (или вроде того) между различными обработчиками, используется свойство объекта Request, в котором хранится ParameterBag.

С моей точки зрения, "подменять" Request вообще нелья в рамках выполняемого запроса (метода handle(), если хочешь). Однако, не вижу ничего зазорного в том, чтобы упомянутый объект дополнить своими данными. Их можно в конце концов вычистить, в случае экспорта другой, независимой подсистеме, где про наши "заметки" знать не обязательо.

Вот твина я на сей раз очень хорошо понял, и готов присоединиться к непрозвучавшему напрямую вопросу: "причем тут вообще PSR-7?".

Цитата (Arh @ 20.12.2017 - 11:54)
Зачем? Это же всё перечёркивает. Зачем тогда вся эта абстракция.

Главным образом для совместимости. Но и для более удобной работы в парадигме ООП тоже! wink.gif
Цитата (Arh @ 20.12.2017 - 11:54)
Мы по сути имеем тот же глобальный $_POST, только теперь он ещё и в константе. Так что ли?

Да, всё что идет в запросе должно оставаться либо в неизменном, либо в легко обратимом к первоначальному состоянию, виде. Не знаю уж насколько Request должен быть (супер)глобальным, с моей точки зрения чем больше глобального в твоей системе, тем меньше она соответствует ООП.

Arh
Ron
Понятно.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
В PSR-7 кстати есть такая фишка, как объект-значение. Если что то в объекте изменяется, то метод всегда возвращает новый объект. Это как раз и дает возможность гибкого изменения состояния текущего объекта, не затрагивая состояние системы. Так что если хочешь, всегда можно построить её так, что можно вернуться в любую точку, а можно просто выполнять цепочку(и). Тут тебе и глобальные и текущие значения, выбирай на вкус.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
chee
Пацаны то и не знают https://github.com/php-fig/fig-standards/bl...est-handlers.md

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Цитата (chee @ 20.12.2017 - 17:59)
Пацаны то и не знают

Ну он как бы не принят еще, 15-й PSR. Рановато на него ссылаться.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Arh
Кто то уже пользовался psr-7?

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
chee
Arh, эм, я. В своих цмсках и на одном реальном проекте.


_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Arh
chee
А ты свою реализацию делал, или что стороннее?

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
Цитата (Arh @ 21.12.2017 - 17:33)
А ты свою реализацию делал, или что стороннее?
Я писал свою. Есть вопросы? Задавай, я про него очень много знаю теперь. smile.gif


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Arh
twin
Есть 100500 вопросов, надо все вспомнить и как то сформулировать)

Перечитал тему.

Про потоки.
Ron писал
Цитата
twin, можно немного поконкретнее, какие там потоки? Про ReactPHP что ли?

Ты ответил
Цитата
Сейчас я пишу статью про всё это.  smile.gif

Но в статье про потоки только один абзац, просто упоминание что они есть, всё. Как говорится -
тема сисек не раскрыта.
Я бы хотел вкурить это всё. Возможно статью почитать.
В теле Response всегда поток? По умолчанию?
Что если между тем как мы напишем в каком то из мидлваров
return new Request($stream);

И тем как мы отправим это в браузер
$request->send(); // Я не знаю как мы отправляем в браузер, так что это ещё один вопрос

Что если между тем и этим мы напишем ob_start(); ob_clean(); это же тоже поток, они как то связаны? одно не поломает другое?

Кроссплатформенность

В статье
Цитата
Это довольно интересно и выгодно производителям различных плагинов и компонентов. Сейчас они пишутся под конкретную среду. Под Symfony, WordPress, Джумлу наконец. А если все будут юзать один стандарт, то плагины станут универсальными. А значит расширится рынок сбыта.


Но когда я спрашивал про $http = (object)[request, response];, ты сказал что можно и так, что суть не в этом.
Да и в теме такое звучало:

twin
Цитата
Но окрываю доку Slim, и что вижу...
$email = $app->request()->post('email');
Простите, но метод post() не сертифицирован в PSR-7. Хотя Slim громко заявляет о своей бесконечной ему преданности.


Так вот плагин из одной cms использует дополнительные обвесы на psr-7 (slim), а плагин из другой cms в метод получает не $request && $response и возвращает $response, а получает vasya\http, которое содержит psr-7 request/response со своими обвесами вот.
Они всё равно "станут универсальными"?

Ещё про потоки
twin
Цитата
PSR-7 призывает парсить сырой поток, и получать запчасти из него.

Как наполняется Request? Тоже из потока? Или туда по старинке передаются $_GET, $_POST итд, видел где то, вроде в aura про psr-7, неуверен, краем глаза что то попадалось.

Вот например
Третий параметр заголовки. Нужно туда getallheaders() передать? Почему это не обязательный параметр? Как мы без заголовков?

У меня сейчас мало времени что бы вкуривать исходники например того же guzzle/psr7, где "get started" для чайников? ява за 7 дней?

Пока всё) пора спать


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.