/ laravel

10 лучших Laravel хелперов для упрощения жизни

Laravel включает в себя множество вспомогательных функций-хелперов. Существует множество хелперов, включенных в laravel из коробки, которые вы можете использовать, чтобы упростить и сукорить процесс разработки на фреймворке. В этой статье я расскажу о 10 лучших хелперах в Laravel, которые я постоянно использую, чтобы облегчить мою разработку. Ранее я уже создавал статью, где рассказывал о 5 полезных в работе хелперах. Эта статья дополняет предыдущую новыми функциями и примерами.

Для того, чтобы просмотреть весь список из доступных хелперов, можете открыть страницу документации. Или же, если вам требуется создать свои собственные хелперы, то в этой статье показан пример того, как это сделать в лучшем виде.

В этой статье я расскажу о списке таких хелперов:

array_dot()

Хелпер array_dot() позволяет преобразовывать многомерный массив в одномерный, который использует точечную запись представления вложенностей.

$data = [
    'user' => ['username' => 'truehero'],
    'app' => ['admin' => ['name' => 'truehero'], 'created' => 'now']
];
 
$dot_array = array_dot($array);
// [user.username] => truehero, [app.admin.name] => truehero, [app.created] => now

array_get()

Хелпер array_get() извлекает значение из многомерного массива, используя точечные аннотации.

$data = [
    'user' => ['username' => 'truehero'],
    'app' => ['admin' => ['name' => 'truehero'], 'created' => 'now']
];
 
$username = array_get($data, 'app.admin.name'); // truehero

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

$data = [
    'user' => ['username' => 'truehero'],
    'app' => ['admin' => ['name' => 'truehero'], 'created' => 'now']
];
 
$username = array_get($data, 'app.undefined.name', 'anonym'); // anonym

public_path()

Хелпер public_path() возвращает полный абсолютный путь к директории public вашего приложения Laravel. Вы также можете передать аргументом функции путь к файлу или каталогу в директории public, чтобы получить абсолютный путь к этому ресурсу. Он просто добавит public_path() к вашему аргументу.

$public_path = public_path(); // /var/www/public
 
$path = public_path('js/app.js'); // /var/www/public/js/app.js

Str::orderedUuid()

Хелпер Str::orderedUuid() использует библиотеку, которая помогает генерировать уникальные идентификаторы. Метод Str::orderedUuid() генерирует уникальное значение на основе временной метки timestamp, потому, эти значения можно использовать как уникальные идентификаторы в базе данных. При использовании этой библиотеки в Laravel 5.6 и выше, всплывает исключение Ramsey\Uuid\Exception\UnsatisfiedDependencyException. Чтобы это пофиксить, просто установить ещё один дополнительный пакет moontoast/math, выполнив следующую команду:

composer require "moontoast/math"

После чего, можете безпрепятственно пользоваться этим хелпером.

use Illuminate\Support\Str;
 
return (string) Str::orderByUuid() // 8e57e8af-d9bd-44f0-a766-b3e7c7885a61

Str::plural()

Хелпер Str::plural() конвертирует строку в её множественную форму. Эта функция поддерживается только для английского языка.

use Illuminate\Support\Str;

echo Str::plural('user', 1); // user
echo Str::plural('user', 2); // users

Но, для того, чтобы добавить возможность работы с русскими словами, можете добавить собственный хелпер, как было описано в этой статье, например так:

if(!function_exists('str_plural_ru')) 
{
    function str_plural_ru($n, $forms) {
        return $n%10==1&&$n%100!=11?$forms[0]:($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$forms[1]:$forms[2]);
    }
}

// использование
echo str_plural_ru(1, ['яблоко', 'яблока', 'яблок']); // яблоко
echo str_plural_ru(2, ['яблоко', 'яблока', 'яблок']); // яблока
echo str_plural_ru(100, ['яблоко', 'яблока', 'яблок']); // яблок

route()

Хелпер route() генерирует URL-адрес по имени маршрута.

$url = route('register');
echo $url;

// или в представлении
<a href="{{ route('login') }}">Login</a>

Если для указанного маршрута нужно передать параметры, вы можете указать их в виде массива в качестве второго аргумента.

$url = route('projects.show', ['id' => 1]);
// или просто, если требуется только один параметр
$url = route('projects.show', 1);

Если вы хотите сгенерировать относительный URL, а не абсолютный, то можете передать false в качестве третьего аргумента.

$url = route('projects.show', ['id' => 1]);

tap()

Хелпер tap() принимает два аргумента: значение и анонимную функцию. Этот хелпер передаёт значение из первого аргумента в анонимную функцию, а затем будет возвращено этот же значение из первого аргумента. Возвращаемое значение анонимной функции не имеет значения, потому что всегда будет возвращён первый аргумент функции.

$user = App\User::find(1);

$user = tap($user, function($user) {
    $user->update([
        'api_token' => str_random()
    ]);
});

Преимущество использования функции tap - вместо того, чтобы возвращать булево значение после вызова $user->update(), она вернёт модель пользователя $user.

Если вы не передаете анонимную функцию, то это функцию можете использовать для построения цепи вызовов свойств/методов. Возвращаемое значение всегда будет значением из первого аргумента, независимо от того, что вызываемые методы возвращают на самом деле. В приведённом ниже примере он вернет модель пользователя вместо булевого значения. Метод update() возвращает белево значение, но благодаря хелперу touch() при вызове определённого метода будет возвращена модель пользователя.

$user = tap($user)->update(['api_token' => 'hardcoded']);

dump()

Хелпер dump() выводит на экран информацию о переданном значении без остановки работы скрипта (в отличии от хелпера dd(), которые обрывает работу скрипта).

dump($var1);
dump($var1, $var2, $var3);

Str::slug()

Хелпер Str::slug() генерирует ЧПУ URL-адрес из переданной строки. Эту функцию вы можете использовать для создания ЧПУ-ссылки для поста, или продукта по его заголовку.

$slug = Str::slug('Blog post about laravel helpers', '-'); //blog-post-about-laravel-helpers

optional()

Хелпер optional принимает в качестве аргумента какое-то значение, у которого вы можете вызвать его методы и свойства. Но, если в качестве аргумента был передан null, вызов его методов вернёт null вместо срабатывания ошибок или выбрасывания исключений.

$user = \App\User::find(100500);

$name = optional($user)->name; // null