Laravel: путь
Хорошо всё начиналось, но Ларавель всё больше и больше превращается в блоатварь.
Пул-реквесты вообще без обсуждений и оценок тупо мержатся в мастер. Возможно, что какие-то уж совсем спорные вещи отвергаются, но общее впечатление такое, что мержится всё подряд. Интересно, есть у Тейлора какое-то “видение”, “путь развития?”
Проиллюстрирую лог с пары страниц нововведений. Рассматривать буду только добавление нового функционала (Added), чтобы показать именно вектор развития, а не исправления ошибок и оптимизации. (Написал эту заметку год назад, поэтому версии будут актуальные на момент написания.)
- 
    Added artisan make:cast command(#32594)
 Добавлена вartisanкоманда для создания файла вapp\Castsпо захардкоженному шаблону. Типа, чтобы руками не копировать… Нуууу, ок.
- Added Illuminate\Foundation\Testing\Concerns\InteractsWithDatabase::assertDatabaseCount()(#32597)
 Инструкция для, якобы, облегчения тестирования БД. Проверка, что в БД ровно такое-то количество записей. 200 строк кода, из которых полезного делают только две:- $this->actualCount = $this->database->table($table)->count(); return $this->actualCount === $this->expectedCount;
- 
    Allow configuring the auth_mode for SMTP mail driver(#32616)
 Сахар для добавления забытой ранее опции - пробрасывания в SMTP-драйвер режима авторизации. Удивительно, что этого не сделали изначально, при добавлении драйвера.
- 
    Added hasNamedScope() function to the Base Model(#32622, #32631)
 Добавление метода, чтобы проверить наличие у моделиscopeXXXметода. Причина - плохое проектирование. Из реального, чего не хватало мне и приходилось дублировать - получить набор зависимостей у модели - список relations, чтобы знать, от каких моделей зависит эта и какие модели зависят от этой. Но нет, такой возможности нет. А вот проверить наличие скоупа теперь есть.
- 
    Allow doing truth-test assertions with just a closure(#32626, f69ad90, 22d6fca)
 Добавлено выведение типа из переданного в замыкании при написании тестов. Уменьшен визуальный шум при использовании строгой типизации в коде. На мой взгляд, полезная доработка, хоть ничего и не меняющая.
- 
    Run pagination count as subquery for group by and havings(#32624)
 По сути, это исправление очень давней ошибки с подсчётом количества результатов в SQL-группах. Странно, что попало в “новое”.
- 
    Added Callbacks with Output to Console Schedule(#32633, 35a7883, 8d8d620)
 Добавили получение результата вывода, если команда шедулера в процессе работы что-то там напечатала. Как по мне, это не задача шедулера вообще. Если нужно что-то сделать с результатом работы команды - это должно быть в самой команде, а не накручивать промисы на шедулер для небольшого частного случая.
- 
    Added Cache::lock() support for the database cache driver(#32639, 573831b)
 Теперь мьютексы с таймерами поддерживаются не только на файлах, но и на БД. Наверное, полезная кому-то вещь. Хотя, зачем хранить кеши в БД - вопрос интересный.
- 
    Same-session ID request concurrency limiting(#32636)
 Странно, что это в разделе “Added”, хотя это по сути багфикс - запрет конкурентной работы с сессиями: когда один процесс пишет сессию, а второй читает (или оба пишут), что приводит к чтению неполных данных из сессии или вообще чтению чёрт знает чего или записи “сломанного” состояния сессии.
- 
    Add skipUntil and skipWhile methods to the collections(#32672, #32676)
 Снова сахар. На этот раз для того, чтобы “проматывать” в коллекциях какие-то элементы. Работают в противоположностьtakeUntilиtakeWhile. По сути, все четыре метода - это аналогfilterс состоянием.
- 
    Support delete with limit on sqlsrv(f16d325)
 Поддержка в MSSQL синтаксисаDELETE TOP FROM .... Прикольно. Раньше такой синтаксис работал, но удалял всё ;) Забавно, что это тоже “новая фича”, а не багфикс.
- Added mergeFillable() and mergeGuarded() to Model(#32679)
 И опять сахар. Раньше нужно было писать- $this->fillable = array_merge($this->fillable, $fillable);, а теперь можно:- $this->mergeFillable($fillable). Красота!
- Added more proxy methods to deferred value from Illuminate\View\Component::createInvokableVariable()(08c4012)
 В принципе, полезные методы. Только какой прикладной смысл? Ни ссылки на причину добавления, ни описания в самом комите, ни тестов. Ну, Тейлору виднее.
- 
    Add pdo try again as lost connection message(#32544)
 Гадкий хак, чтобы отличать обрыв связи в процессе работы от ошибки.
- Compile Echos Within Blade Component Attributes(#32558)
 Ломающая обратную совместимость правка. Синтаксический сахар для не очень популярного, как мне кажется, случая. И, да, вот этот кусок кода как-то попахивает:- $value = $this->blade->compileEchos($attributeString); ... $value = str_replace('<?php echo ', '\'.', $value); $value = str_replace('; ?>', '.\'', $value); return $value;
- Parameterless Component Methods Invokable With & Without Parens(#32560)
 Тоже смешной фикс, ломающий обратную совместимость. Затыкание ранее сделанного хака: если в блейде написать- {{ $foo }}, и $foo - это метод, то он будет вызван. Теперь же, можно его написать со скобками:- {{ $foo() }}. Ибо, если верить комментариям, Тейлор задолбался писать скобки, чтобы вызвать метод, и обнаруживать, что их не надо было писать.
- Added Illuminate\Database\Schema\Blueprint::rawIndex()(#32411)
 53 строки влитого кода, суть которого в одной. Это просто сахар, чтобы не писать- new Expressionв миграциях. На мой взгляд, очень сомнительно:- public function rawIndex($expression, $name) { return $this->index([new Expression($expression)], $name); }
И дальше ничуть не лучше. Ничего принципиально нового, только добавление сомнительного “сахара” в места, где, как по мне, и без него всё нормально работало…