Фишки и трюки в Laravel #3

Представляю очередные трюки и нововведения в Laravel. На данный момент последняя вышедшая версия — 9.10.0


Специальный хелпер для проверки на пустоту

Хелпер 'blank()' для проверки на пустоту строк, коллекций, массивов и других типов данных.

blank('');         // true
blank('  ');       // true
blank(null);       // true
blank(collect());  // true

blank(0);          // false
blank(true);       // false
blank(false);      // false


Шпаргалка по методам Request URL

Данные методы помогут разложить текущий URL-адрес на необходимые части.

requiest()->url();
// http://example.site/example/docs

requiest()->fullUrl();
// http://example.site/example/docs?page=1

requiest()->fullUrlWithQuery(['filter' => 'applied']);
// http://example.site/example/docs?page=1&filter=applied

requiest()->fullUrlWithoutQuery(['page']);
// http://example.site/example/docs

requiest()->path();
// example/docs

requiest()->segment(2);
// docs

requiest()->segments();
// ['example', 'docs']


Одна валидация для всех HTTP-методов

public function rules(): array
{
    return match($this->method()){
        'POST' => [
            'category_id' => 'required|int|exists:categories,id',
            'description' => 'string',
            'quantity' => 'int|required',
            'cost_unitary_price' => 'required',
        ],
        'PUT' => [
            id' => 'required|int|exists:inventories,id',
            'category_id' => 'required|int|exists:categories, id',
            'description' => 'string|nullable',
            'quantity' => 'int|nullable',
            'cost_unitary_price' => 'nullable',
        ],
        'DELETE' => [
            'id' => 'required|int|exists:inventories, id',
        ],
    }
}


Поддержка метода collect() в HTTP-запросе (v. 8.29+)

Создание коллекций из результатов запроса стало проще.

// Было
collect(
    Http::get('example.com/api/users')
        ->json()
)->pluck('name');

// Стало
Http::get('example.com/api/users')
    ->collect()
    ->pluck('name');


Отправка вывода запланированных задач на почту

Совет от Srinath Reddy по автоматизации отправки вывода запланированных задач.

// Отправить электронное письмо с выводом после завершения
$schedule->command('snapshot')->daily()->emailOutputTo(['user@user.com']);

// Отправить электронное письмо с выводом после завершения (только если есть вывод)
$schedule->command('snapshot')->daily()->emailWrittenOutputTo(['user@user.com']);

// Отправить электронное письмо с выводом только в случае сбоя
$schedule->command('snapshot')->daily()->emailOutputOnFailure(['user@user.com']);


Дамп HTTP-запроса

В версии 8.32 появился дамп HTTP-запроса перед отправкой с помошью метода 'dd()'.

return Http::dd()->get('http://example.com');

Подробнее: https://laravel.com/docs/http-client#dumping-requests


Своя директива в Blade шаблонах

Если нужно приводить данные в шаблонах Blade к определённому виду, то можно создать свою директиву, которая это и будет делать. В примере от Povilas Korop.

// composer.json
"require": {
    "laravel/cashier": "^12.9",
}

//app/Providers/AppServiceProvider.php
public function boot()
{
    Blade::directive('money', function ($expression) {
        return "<?php echo Laravel\Cashier\Cashier::formatAmount($expression, config('cashier.currency')); ?>";
    });
}

// В шаблоне Blade
<div>Price: @money($book-price)</div>
@if ($book-discount_price)
    <div>Discounted price: @money($book->discount_price)</div>
@endif