5 Laravel Helpers Которые Сделают Вашу Жизнь Проще

В Laravel существует тонна вспомогательных методов, которые делают разработку более эффективной. Если вы разрабатываете на Laravel Framework, я советую присмотреться к хелперам указанным в этой статье. Они помогут вам сделать разработку более эффективной.

data_get()

Хелпер data_get() позволяет получить данные из массива или объекта в "dot" нотации. Эта функция похожа на функцию array_get(), за тем исключением, что array_get() работает только с массивами. Опциональный 3й параметр позволяет указать значение по-умолчанию:

$array = ['albums' => ['rock' => ['count' => 75]]];

$count = data_get($array, 'albums.rock.count'); // 75
$avgCost = data_get($array, 'albums.rock.avg_cost', 0); // 0

$object->albums->rock->count = 75;

$count = data_get($object, 'albums.rock.count'); // 75
$avgCost = data_get($object, 'albums.rock.avg_cost', 0); // 0

При использовании '*' в качестве параметра, Laravel вернет массив с результатами:

$array = ['albums' => ['rock' => ['count' => 75], 'punk' => ['count' => 12]]];
$counts = data_get($array, 'albums.*.count'); // [75, 12]

data_get() помогает получить элементы из массива или объекта, не заботясь о том, к какому типу относится переменная.

str_plural()

str_plural() помогает сконвертировать строку в правильную форму множественного или единственного числа. К сожалению на данный момент эта функция работает только с английскими словами. Второй параметр позволяет хелперу определить в какую форму нужно конвертировать строку:

str_plural('dog'); // dogs
str_plural('cat'); // cats

str_plural('dog', 2); // dogs
str_plural('cat', 1); // cat

str_plural('child'); // children
str_plural('person'); // people
str_plural('fish'); // fish
str_plural('deer', 2); // deer

str_plural() помогает избавиться от кода вроде: {{ $count == 1 ? 'dog' : 'dogs' }}. Так же доступна обратная функция str_singular(), которая работает наоборот.

route()

route() хелпер генерирует URL для именовонного роута. Во втором параметре можно передать дополнительные параметры для указанного роута.

Route::get('burgers', '[email protected]')->name('burgers');
route('burgers'); // http://example.com/burgers
route('burgers', ['order_by' => 'price']); // http://example.com/burgers?order_by=price

Route::get('burgers/{id}', '[email protected]')->name('burgers.show');
route('burgers.show', 1); // http://example.com/burgers/1
route('burgers.show', ['id' => 1]); // http://example.com/burgers/1

Route::get('employees/{id}/{name}', '[email protected]')->name('employees.show');
route('employees.show', [5, 'chris']); // http://example.com/employees/5/chris
route('employees.show', ['id' => 5, 'name' => 'chris']); // http://example.com/employees/5/chris
route('employees.show', ['id' => 5, 'name' => 'chris', 'hide' => 'email']); // http://example.com/employees/5/chris?hide=email

Если в роуте есть только 1 параметр - его можно передавать просто во втором аргументе. Если же в роуте несколько параметров, то во втором аргументе нужно передавать массив.

Если передать false в 3й аргумент, то функция вернет относительный путь, а не абсолютный.

route('burgers.show', 1, false); // /burgers/1

Эту функцию так же можно использовать для генерации URL для поддоменов:

Route::domain('{location}.example.com')->group(function () {
  Route::get('employees/{id}/{name}', '[email protected]')->name('employees.show');
});

route('employees.show', ['location' => 'raleigh', 'id' => 5, 'name' => 'chris']); // http://raleigh.example.com/employees/5/chris

Так же можно передавать Eloquent модель прямо в функцию:

route('burgers.show', Burger::find(1)); // http://example.com/burgers/1

Вся магия заключается в том, что класс Model реализует интерфейс UrlRoutable. По-умолчанию из модели берется primary key, однако вы можете изменить поведение, переопределив функцию getRouteKeyName():

class Burger extends Model
{
  public function getRouteKeyName()
  {
    return 'slug';
  }
}

abort_if()

abort_if() хелпер позволяет выкинуть исключение если в него передать true. Второй параметр определяет HTTP код который вернет сервер, а в третьем параметре можно указать свой текст для ошибки:

abort_if(! Auth::user()->isAdmin(), 403);
abort_if(! Auth::user()->isAdmin(), 403, 'Sorry, you are not an admin');
abort_if(Auth::user()->isCustomer(), 403);

optional()

Хелпер optional() поволяет вызывать методы или получать доступ к свойствам выбранного класса. Если переданный объект null, то функция вернет null, вместо того чтобы выкинуть ошибку:

// User 1 exists, with account
$user1 = User::find(1);
$accountId = $user1->account->id; // 123

// User 2 exists, without account
$user2 = User::find(2);
$accountId = $user2->account->id; // PHP Error: Trying to get property of non-object

// Fix without optional()
$accountId = $user2->account ? $user2->account->id : null; // null
$accountId = $user2->account->id ?? null; // null

// Fix with optional()
$accountId = optional($user2->account)->id; // null

Что дальше?

Я показал лишь малую часть хелперов которые доступны в Laravel. Вам так же стоит ознакомиться с документацией в которой есть описание для всех хелперов доступных в Laravel.

Перевод статьи 5 Laravel Helpers to Make Your Life Easier.

Опубликовано:

Категории: Статьи