Хорошо всё начиналось, но Ларавель всё больше и больше превращается в блоатварь.

Пул-реквесты вообще без обсуждений и оценок тупо мержатся в мастер. Возможно, что какие-то уж совсем спорные вещи отвергаются, но общее впечатление такое, что мержится всё подряд. Интересно, есть у Тейлора какое-то “видение”, “путь развития?”

Проиллюстрирую лог с пары страниц нововведений. Рассматривать буду только добавление нового функционала (Added), чтобы показать именно вектор развития, а не исправления ошибок и оптимизации. (Написал эту заметку год назад, поэтому версии будут актуальные на момент написания.)

v7.10.0

  • 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). Красота!

v7.9.1

  • Added more proxy methods to deferred value from Illuminate\View\Component::createInvokableVariable() (08c4012)
    В принципе, полезные методы. Только какой прикладной смысл? Ни ссылки на причину добавления, ни описания в самом комите, ни тестов. Ну, Тейлору виднее.

v7.9.0

  • 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() }}. Ибо, если верить комментариям, Тейлор задолбался писать скобки, чтобы вызвать метод, и обнаруживать, что их не надо было писать.

v7.7.0

  • Added Illuminate\Database\Schema\Blueprint::rawIndex() (#32411)
    53 строки влитого кода, суть которого в одной. Это просто сахар, чтобы не писать new Expression в миграциях. На мой взгляд, очень сомнительно:
    public function rawIndex($expression, $name)
    {
      return $this->index([new Expression($expression)], $name);
    }
    

И дальше ничуть не лучше. Ничего принципиально нового, только добавление сомнительного “сахара” в места, где, как по мне, и без него всё нормально работало…