PHP Fart Time
1.8K subscribers
100 photos
5 videos
2 files
194 links
Привет, фартаны!

Дурачимся, пилим OpenSource и рассказываем про пердовые технологии в php.

Авторы контента: @roxblnfk и @butschster
加入频道
PHP Fart Time
Без лишних слов, анонс: сегодня вечером опробуем Yii3 App 1.0.0. https://www.youtube.com/watch?v=ksjGwhvVcN8
Было время переспать с мыслями по Yii3 App.
Хвалебных слов не будет, ибо #токсикСреда. Но ребята и так знают, что они молодцы 🫡
Мой технический разбор из двух частей в дополнение к стриму:

🖼️ Массивы уже не айс. Всё-таки времена PHP 7.4 позади.

Обратите внимание на то, что параметры (params) очень хорошо ложатся на DTOшки. DTOшки тоже хорошо сериализуются и десериализуются, кладутся куда угодно, версионируются по semver.
Бонусы очевидны: типизация, автокомплит, не надо знать "путь" до нужного конфига во всеобщем $params. В DTO также можно добавлять атрибуты для настройки мерж-планов или даже авторезолвинга альясов.

# Было
/**
* @var array $params
*/
Foo::class => static function() use ($params): Foo {
return new Foo($params['foo/bar']['option']);
}

# Стало
Foo::class => static function(FooConfig $config): Foo {
return new Foo($config->option);
}


🖼️ Про кашу параметров и структуру: мы вынесли тезис, что в куче параметров чёрт ногу сломит. Хрен найдёшь то, что ищешь.
Однако, я знаю как этого избежать. Всё дело в структуре проекта!

Предлагаемая структура "как в Laravel" проклята. Группировка по типу классов, мол "тут контроллеры, тут хендлеры, тут ещё что-то", — тупиковый путь.
Вот если бы сразу сгруппировать по фичам или модулям, то что получится? Можно раскидать и перегруппировать не только контроллеры/сервисы/etc , но и параметры с конфигами DI.
Ребята, поработайте над структурой!

🖼️ Нельзя получить Request из контейнера: надо сначала получить RequestProvider, затем дёрнуть на нём метод get.

Оно понятно, почему так:
- Мало кто знает, но PSR контейнер по спеке должен быть идемпотентным: на один и тот же id возвращать всегда один и тот же результат. Там не предусмотрены non-singleton биндинги.
- А раз в контейнере всё синглтон, то реквест туда не положишь из-за его динамической натуры: в long running реквест будет каждый раз другой, также он может измениться в PSR мидлварях.

Но не понятно, почему платить за это должны разработчики. Как по мне, плата высокая.
Решить, кстати, эту проблему можно кучей разных доступных способов. Решайте! :)

🖼️ Чтобы уметь работать в неумираемом режиме, Yii опирается на два столпа: дедовские ресеттеры и иммутабельность. Ресеттеры полагаются на события PSR EventDispatcher.
Я доку не читал (а кто её вообще читает?), но надеюсь, что диспетчер событий не навязывается для использования в юзер-ленде.
И если ресеттеры — удел фреймворков, которые не смогли в архитектуру, и для исключительных случаев, то иммутабельность — очень хорошо. Я бы рекомендовал использовать больше иммутабельности и одноразовых объектов, чтобы стейты юзеров не текли, и им не приходилось писать ресеттеры, которые они всё равно писать не будут.
То, что мы видели на стриме мне не понравилось: стейт контроллера протекает. Да, я бы сам не писал такой код, но мы же говорим про фреймворк общего назначения уровня "домохозяйка+". Ну и напомню: если висит ружьё, то оно обязательно выстрелит.
Please open Telegram to view this post
VIEW IN TELEGRAM
15💊5🔥2🤔11
🖼️ Доку мы не читаем, но блин. Доки не хватает! Где дока, @samdark? Почему она там, а не здесь?

Саша понял, про что я: в закрытом чате мы уже обсудили, что было бы неплохо иметь больше описания и ссылок в коде. Паша, конечно, молодец, что быстро разобрался с параметрами роута, однако мы уже живём в мире, где надо делать супер быстро, где LLM смотрит на примеры кода, которые под носом (это не только вайбкоддинга касается, но и автокомплита тоже), где смузи-разработчики не будут углубляться (для этих надо ещё и эмоджи 📖 добавлять).

Вывод мой такой:

Сейчас Yii — конструктор с маленькими деталями. Чтобы сделать что-то большое, придётся много сражаться в рукопашную. И я уже "стар для этого дерьма".
Также я не люблю фреймворки, которые мешают или ограничивают. Yii3 не ограничивает, однако если мне для того, чтобы получить $request, надо сначала получить RequestProvider, а чтобы отправить строчку, нужно создать Response и стрим для него, то произойдёт что-то одно:
- либо я пойду велосипедить и делать базовый контроллер, который будет сахарным, но в дальнейшем код моих контроллеров будет без лапши.
- либо с возгласом "доколе можно!" возьму другой фреймворк.

У Yii 3 есть чаты для сообщества (открытые и закрытые по подписке), но почему бы не обсудить что-то прямо здесь?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11
Сегодня наткнулся на очередной пост в LinkedIn о том, что в Laravel добавили кнопку "Скопировать Markdown" специально для AI, и кто-то пошел дальше и запилил пакет с кнопками Ask ChatGPT / Ask Claude прямо на странице ошибки.

И я призадумался 🤔 ибо #токсикСреда.

Если разработчику нужно обязательно спросить у AI, чтобы понять, что за ошибка в его же коде — это выглядит пугающе.

Мы же таким образом выращиваем не программистов, а AI-операторов, которые без LLM даже стек-трейс не смогут прочитать и понять, что же они там наговнокодили/вайбкодили.

Ну а ты собираешься спрашивать у AI про ошибки в твоем же говнокоде? Не боишься получить дозу кибер-унижения? Поделитесь кейсами которые было сложно дебажить и где бы помог AI 👇
😁23125