Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Помощники: строки, массивы, даты

Помимо больших возможностей в Laravel есть сотни маленьких функций для ежедневной работы: сделать адрес из заголовка, обрезать текст, достать значение из вложенного массива, показать «3 часа назад». Знать их полезно, чтобы не писать то же самое вручную.

Строки

use Illuminate\Support\Str;
 
Str::slug('Как выбрать чай');            // kak-vybrat-chai
Str::limit('Очень длинный заголовок', 12); // Очень длинны...
Str::title('война и мир');               // Война И Мир
Str::random(16);                          // случайная строка
Str::uuid();                              // уникальный идентификатор
Str::contains('laravel.com', '.com');     // true
Str::plural('post');                      // posts

Цепочки

Функция str() возвращает объект, методы которого можно вызывать подряд:

$slug = str('  Новая статья: PHP 8.4  ')
    ->trim()
    ->lower()
    ->slug();
 
$initials = str('Анна Иванова')->explode(' ')->map(fn ($word) => mb_substr($word, 0, 1))->join('');

Массивы

use Illuminate\Support\Arr;
 
$user = ['name' => 'Анна', 'address' => ['city' => 'Казань']];
 
Arr::get($user, 'address.city');            // Казань
Arr::get($user, 'address.street', '—');     // —
Arr::only($user, ['name']);                 // ['name' => 'Анна']
Arr::except($user, ['address']);            // ['name' => 'Анна']
 
data_get($user, 'address.city');            // то же для массивов и объектов

Запись через точку избавляет от цепочек isset().

Даты

Даты в Laravel — объекты Carbon, расширение стандартного класса дат:

now();                          // текущий момент
today();                        // сегодня в 00:00
now()->addDays(3);
now()->subMonth()->startOfMonth();
now()->isWeekend();
 
$post->created_at->format('d.m.Y');
$post->created_at->diffForHumans();   // 3 часа назад

Столбцы created_at и updated_at модель превращает в Carbon сама. Язык фразы «3 часа назад» зависит от настройки APP_LOCALE.

Числа

use Illuminate\Support\Number;
 
Number::format(1234567.891, 2);          // 1,234,567.89
Number::currency(1250, 'RUB', 'ru');     // 1 250,00 ₽
Number::percentage(12.5, 1);             // 12.5%
Number::fileSize(5 * 1024 * 1024);       // 5 MB
Number::abbreviate(1500000);             // 2M

Адреса

route('posts.show', $post);     // адрес по имени маршрута
url('/about');                  // полный адрес
asset('images/logo.png');       // адрес файла из папки public

Короткие обращения

ФункцияЧто возвращает
auth()->user()Текущий пользователь
request('page')Значение из запроса
session('key')Значение из сессии
config('app.name')Настройка
back()Перенаправление на прошлую страницу
collect([1, 2])Коллекция из массива
blank($value), filled($value)Пустое ли значение

Отладка

dump($user);        // показать значение и продолжить
dd($user, $posts);  // показать и остановить программу
 
$posts = Post::where('published', true)->dd();   // показать запрос

Частая ошибка

Вызовы dd() и dump(), забытые в коде, попадают на рабочий сайт и показывают посетителям внутренние данные — или обрывают страницу на середине. Перед каждой отправкой изменений ищите их по проекту; анализатор кода Larastan умеет находить такие вызовы сам.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.