Laracode
Laracode

Хелпер "words"

Иногда вам может понадобиться ограничить количество слов в строке. К счастью, в Laravel есть удобный хелпер words, который поможет сделать это буквально в одну строчку! 🚀

<?php

use Illuminate\Support\Str;

return Str::words("Рефакторинг без тестов — это плохая идея!", 3);
// Рефакторинг без тестов...

return Str::words("Рефакторинг без тестов — это плохая идея!", 3, ' 👀');
// Рефакторинг без тестов 👀

// Так же через str хелпер 😎
return str("Рефакторинг без тестов — это плохая идея!")->words(2);
// Рефакторинг без тестов...

Хелпер функция scan

Знали ли вы, что вы можете использовать хелпер scan для разбора строкового ввода в коллекцию согласно формату, поддерживаемому встроенной функцией sscanf в PHP? 🚀

<?php

$rgb = '#402A2A';

[$r, $g, $b] = str($rgb)->scan('#%2x%2x%2x');

// $r = 64, $g = 42, $b = 42

Обрабатывайте данные с помощью метода transform()

Элегантно модифицировать данные Laravel предлагает при помощи метода transform(). Этот хелпер позволяет выборочно преобразовывать данные и обрабатывая нулевые значения.

<?php

// Вместо
$displayName = $user->name ? ucwords($user->name) : 'Guest';

// Более элегантное решение
$displayName = transform($user->name, fn ($name) => ucwords($name), 'Guest');

// Базовое использование
$result = transform('hello world', fn ($text) => strtoupper($text));
// 'HELLO WORLD'
 
// Если значение null, вернется дефолтное значение
$result = transform(null, fn ($value) => $value * 2, 'default');
// 'default'

Функция transform() принимает три параметра для обработки ваших данных:

  • Значение для преобразования

  • Функция обратного вызова для не нулевых значений

  • Дефолтное значение для нулевых случаев (не обязательный параметр)

Реальный пример

<?php

namespace App\Services;

class CacheService
{
    public function getCacheTimeout()
    {
        return transform(
            config('cache.timeout'),
            fn ($timeout) => $timeout * 60,
            3600
        );
    }
}

Хелпер функция rescue()

Иногда мы вынуждены использовать блок try-catch, чтобы просто проигнорировать ожидаемое исключение, которое внешний сервис выбрасывает при сбое. Laravel предлагает более элегантное решение для таких сценариев с помощью функции rescue() 🚀.

<?php

// Если возникнет исключение, значение переменной $language будет равно 'en'.
try {
    $language = LanguageDetector::detect($request->ip());
} catch (Exception $e) {
    $language = 'en';
}

// Более элегантный способ добиться того же, но исключение все равно будет зарегистрировано.

$language = rescue(fn () => LanguageDetector::detect($request->ip()), 'en');

Функция rescue() выполняет замыкание (closure) и перехватывает все исключения, возникающие во время его выполнения. Все пойманные исключения будут отправлены в ваш обработчик исключений, однако обработка запроса будет продолжена:

<?php

return rescue(fn () => $this->method());

Вы также можете передать второй аргумент. Этот аргумент будет значением по умолчанию, которое должно быть возвращено, если во время выполнения замыкания возникнет исключение:

<?php

return rescue(fn () => $this->method(), false);

return rescue(
    fn () => $this->method(),
    fn () => $this->failure()
);

Аргумент report может быть передан функции rescue(), чтобы определить, следует ли сообщать об исключении через функцию report:

return rescue(
    fn () => $this->method(),
    report: fn (Throwable $throwable) => $throwable instanceof InvalidArgumentException
);