[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PSR-15
Страницы: 1, 2
twin
Не секрет, что черновик "стандарта" PSR-15 пошел вразрез наиболее популярным и зарекомендовавшимся практикам работы с middleware, таким как в Slim, Laravel и так далее, где в него передавался как Request, так и Response. Кроме того, была возможность юзать замыкания и __invoke(). Интерфейс PSR-15 MiddlewareInterface выглядит совсем иначе.

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

И все бы ничего, но вот один момент никак не пойму. Если Response в PSR-15 получается из делегата, то как сделать BEFORE? В Slim все просто:
function ($request, $response, $next) {
$response->getBody()->write('BEFORE');
$response = $next($request, $response);
$response->getBody()->write('AFTER');

return $response;
};

В новой схеме Response нету до того, как отработает хэндлер:
	public function process($request, $handler) {
// $response->getBody()->write('BEFORE'); ????????????
$response = $handler->handle($request);
$response->getBody()->write('AFTER');

return $response;
};


И что теперь, про BEFORE можно забыть? А совместимость... Делать Response "глобальным" в механизме очереди, это тот еще геммор. Чего то я недопонимаю. :(

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

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

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

user posted image
chee
Забудь его забудь, уйдет BEFORE как дым biggrin.gif

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

В PSR-15 будет также только для реквеста, в для респонса все будет по другому, он будет идти снизу, то есть последний мидлвар готовит респонс, в все что перед ним или дополняют его или заменяют на свой.

Недостаток у такого решения есть, нужно будет создавать инстанс респонса в мидлваре, а это лишняя зависимость, что не айс

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Концепцию то я понял, хотя и не сразу. Но мне интересно совместить подходы, потому что чувствую: хрен тот же Slim сдаст позиции. Уже сейчас несколько раз встречал высказывания плана "стандарт Slim". Laravel и многие другие тоже зарылись по уши. На PSR-7 то со скрипом переходят, 15-й с таким подходом вообще до второго пришествия будет внедряться.

Да и неудобный он, PSR-15, может одумаются еще.

Ну в целом понятно, придется извращаться с "глобальным" Response, как бы этого не хотелось. sad.gif

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

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

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

user posted image
twin
Хорошая статья, оставлю тут на всякий случай. По крайней мере теперь понятно, почему так. Но кактус грызть не перестану. smile.gif

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

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

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

user posted image
twin
Ну вот, добился желаемого результата. Тут дока, тут исходник, если интересно кому.

Ну и ушат помоев замечания и критика ожидаема и желанна. smile.gif

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

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

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

user posted image
chee
зашел в исходники и сразу вышел, какой то магический писец

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Угу... Я тоже зашел и вышел. Магия!

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

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

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

user posted image
VeRTak
Цитата (twin @ 16.01.2018 - 09:39)
Угу... Я тоже зашел и вышел. Магия!


laugh.gif
twin
А ты вышел? Или на всегда остался? Я переживаю. sad.gif

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

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

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

user posted image
chee
Я сейчас работаю с Yii1 и кодом написанным под него, вот от такой магической санины уже воротит https://github.com/abc-framework/abc-framew...ableHandler.php

Такая шляпа тоже заставляет меня фейспалмить https://github.com/abc-framework/abc-framew...Adapter.php#L60 (касается всего метода)

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Ну что сказать. Красавчик. Как обычно пришел, насрал неразобравшись, и гордо встал в позу с фейспалмом. Ну я понимаю, если объективно. Либо ты был бы непререкаемо авторитетым программистом. Я на вскидку в твоем коде тоже могу найти кучу говна и самолюбоваться. Но писькомеряние не входит в мои планы. Конструктив - то да. Для того и выволок на всеобщее обозрение.

Сказать по сущесву нечего - промолчи. Смешно смотришься. smile.gif

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

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

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

user posted image
chee
Во-первых, ты смотришь код (внимание), который написан в мае 2016 года;
Во-вторых, там один метод, у тебя три + куча магии которые все это обсуживают.
В-третьих, если бы я актуализировал эту часть, то я бы использовал строгую типизацию как в PSR-15

Цитата (twin @ 16.01.2018 - 14:15)
Как обычно пришел, насрал неразобравшись,

Первый раз от тебя слышу эту претензию, и сразу же в ней "как обычно". Лол, что?

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Цитата (chee @ 16.01.2018 - 12:24)
Во-первых, ты смотришь код (внимание), который написан в мае 2016 года;
И что с того? Это же не мешает тебе сегодня давать на него ссылки, как на пример образцового кода. :) Но я же сказал - не собираюсь меряться пиписками. И причем тут
Цитата (chee @ 16.01.2018 - 12:24)
Во-вторых, там один метод, у тебя три + куча магии которые все это обсуживают.
Это совершенно разные скрипты и у них совершенно разные задачи. Совершенно. И я показал не на метод, а на этот смешной код:
        $path = ltrim($request->getUri()->getPath(), $request->getAttribute('basePath'));

if (empty($path)) {
$path = '/';
} else {
$path = '/' . ltrim($path, '/');
}

Вот.

Цитата (chee @ 16.01.2018 - 12:24)
В-третьих, если бы я актуализировал эту часть, то я бы использовал строгую типизацию как в PSR-15
Вот потому и говорю - насрал неразобравшись. Причем тут строгая типизация и вообще PSR-15? Это адаптер, он работает как с ним, так и с другими возможными вариантами. Я смотрел на строгую типизацию, прототипом вообще была эта поделка. Но я не придумал, как можно иначе заставить работать такой миддлвар
function ($request, $response, $next) {   
$response->getBody()->write('BEFORE');
$response = $next($request, $response);
$response->getBody()->write('AFTER');

return $response;
}

и такой
function ($request, $handler) {   
$response = $handler->process($request);
$response->getBody()->write('AFTER');

return $response;
}
совместно.

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

Да, предвосхищая. Интерфейсы я не использую принципиально, бзык такой у меня.

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

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

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

user posted image
Быстрый ответ:

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