10 лучших Laravel хелперов для упрощения жизни
Laravel включает в себя множество вспомогательных функций-хелперов. Существует множество хелперов, включенных в laravel из коробки, которые вы можете использовать, чтобы упростить и сукорить процесс разработки на фреймворке. В этой статье я расскажу о 10 лучших хелперах в Laravel, которые я постоянно использую, чтобы облегчить мою разработку. Ранее я уже создавал статью, где рассказывал о 5 полезных в работе хелперах. Эта статья дополняет предыдущую новыми функциями и примерами.
Для того, чтобы просмотреть весь список из доступных хелперов, можете открыть страницу документации. Или же, если вам требуется создать свои собственные хелперы, то в этой статье показан пример того, как это сделать в лучшем виде.
В этой статье я расскажу о списке таких хелперов:
- array_dot()
- array_get()
- public_path()
- Str::orderedUuid()
- Str::plural()
- route()
- tap()
- dump()
- Str::slug()
- optional()
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