Трюки в Laravel #1

Собрал несколько трюков для Laravel. На данный момент последняя вышедшая версия — 8.81.0


Совет от Dan Harrin

Для часто используемых форматов даты и времени можно создавать вот такие макросы.

use Illuminate\Support\Carbon;

Carbon::macro(
    'toFormattedDateTimeString',
    fn() => $this->format('M j, Y, H:i'),
);

now()->toFormattedDateTimeString(); // Jan 25, 2021, 14:00

Выбор нужных полей, не используя select()

Методы find() и findOrFail() также позволяют выбрать необходимые поля, не используя метод select().

$user = USER::find(1, ['name', 'email']);
$user = USER::findOrFail(1, ['name', 'email']);

Общий контроллер у группы маршрутов (8.80+)

Теперь можно группировать маршруты ещё и по общему контроллеру. А при определении маршрута нужно указать только метод контроллера, который группа вызывает.

use App\Http\Controllers\OrderController;

Route::controller(OrderController::class)->group(function () {
    Route::get('/orders/{id}', 'show');
    Route::post('/orders', 'store');
});

Сортировка коллекции по ключам с помощью коллбэка

Обратный вызов должен быть функцией сравнения, которая возвращает целое число меньшее, равное или большее нуля. Этот метод использует встроенную функцию uksort().

$collection = collect([
    'ID' => 22345,
    'first' => 'John',
    'last' => 'Doe',
]);

$sorted = $collection->sortKeysUsing('strnatcasecmp');
$sorted->all();

/*
    [
        'first' => 'John',
        'ID' => 22345,
        'last' => 'Doe',
    ]
*/

Метод для рендера строк

Blade::render('Hello, {{ $name }}', ['name' => 'Claire']);
// Returns 'Hello, Claire'

Blade::render('@if($foo) Foo @else Bar @endif', ['foo' => true]);
// Returns 'Foo '