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); }
И дальше ничуть не лучше. Ничего принципиально нового, только добавление сомнительного “сахара” в места, где, как по мне, и без него всё нормально работало…