Laravel Response Builder

Данная библиотека позволяет абстрагировать ответы и кастомизировать их. Можно не создавать свою архитектуру и классы для Response, а достаточно подключить библиотеку и юзать.

Внимание! Проверьте требования перед выбором версии:

https://github.com/MarcinOrlowski/laravel-api-response-builder/blob/master/docs/docs.md

О типизации в php 7.4

Теперь можно будет так:

<?php
class User {
    public int $id;
    public string $name;

    public function __construct(int $id, string $name) {
        $this->id = $id;
        $this->name = $name;
    }
}
<?php
class User {
    /** @var int $id */
    private $id;
    /** @var string $name */
    private $name;

    public function __construct(int $id, string $name) {
        $this->id = $id;
        $this->name = $name;
    }

    public function getId(): int {
        return $this->id;
    }
    public function setId(int $id): void {
        $this->id = $id;
    }

    public function getName(): string {
        return $this->name;
    }
    public function setName(string $name): void {
        $this->name = $name;
    }
}

В пример все типы:

<?php
class Example {
    // All types with the exception of "void" and "callable" are supported
    public int $scalarType;
    protected ClassName $classType;
    private ?ClassName $nullableClassType;

    // Types are also legal on static properties
    public static iterable $staticProp;

    // Types can also be used with the "var" notation
    var bool $flag;

    // Typed properties may have default values (more below)
    public string $str = "foo";
    public ?string $nullableStr = null;

    // The type applies to all properties in one declaration
    public float $x, $y;
    // equivalent to:
    public float $x;
    public float $y;
}

Источник: https://wiki.php.net/rfc/typed_properties_v2

PHP Russia 2019 ElisDN

Про UseCase, фреймворки и в целом ООП.

ООП следует использовать по максимуму. К примеру объекты не использовать как ActiveRecord для связки с таблицой в БД, а полноценно с входящими в конструктор объектами Content, Price, etc.

new Lot($id, $var1, $var2, $title, $content, $blitzPrice, $startPrice)  // half solid
new Lot($id, $var1, $var2, new Content($title, $content), new Price($startPrice, $blitzPrice)) // full solid

Laravel Multilang

Добавили автоматические роуты для интернационализации.

Было:

Route::get('/', 'ShowHomeController')->name('en.home');
Route::get('/fr', 'ShowHomeController')->name('fr.home');

Стало:

Route::multilingual('/', 'ShowHomeController')->name('home');

Так же можно добавить мидлвейр чтобы автоматом проверять изменился ли язык в урле.

protected $middlewareGroups = [
    'web' => [
        \ChinLeung\LaravelMultilingualRoutes\DetectRequestLocale::class,
        // ...
    ]
];

Пример конфигурации:

// config/locales.php
'supported' => [
    'en',
    'es',
    'fr',
],

Пакет GitHub