В этой статье я рассмотрю новые возможности Laravel 5.2 и опишу их по одному. Новые функции перечислены ниже:
- неявная привязка модели маршрута
- проверка массива форм
- Промежуточное программное обеспечение для ограничения скорости API
- группы промежуточного программного обеспечения
- эшафот аутентификации
- несколько драйверов для проверки подлинности
Несколько драйверов для проверки подлинности
Эта функция поможет вам, особенно если вам нужно иметь Doctrine ORM Auth с несколькими провайдерами. В моих проектах я предпочитаю, чтобы аутентификация администратора и пользователя была отделена друг от друга; эта функция поможет мне легко добиться этого. Давайте посмотрим пример config/auth.php
:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
//…
‘guards’ => [
‘user’ => [
‘driver’ => ‘session’,
‘provider’ => ‘users’,
],
‘admin’ => [
‘driver’ => ‘session’,
‘provider’ => ‘admin’,
],
‘api’ => [
‘driver’ => ‘token’,
‘provider’ => ‘users’,
],
],
//…
‘providers’ => [
‘users’ => [
‘driver’ => ‘doctrine’,
‘model’ => App\Entities\Users::class,
],
‘admin’ => [
‘driver’ => ‘doctrine’,
‘model’ => App\Entities\Admin::class,
],
],
|
Теперь, когда вы используете Auth::attempt([...])
, Laravel вызовет охрану по умолчанию; поэтому, если вы хотите использовать определенный сторож, просто позвоните с его именем, например, Auth::guard('admin')
.
Для аутентификации в вашей группе маршрутов с определенным защитником вы можете просто вызвать имя охранника:
1
2
3
|
Route::group([‘middleware’ =>[‘auth:admin’]], function () {
//…
}
|
Иногда вместо простого входа в приложение вы хотите, чтобы пользователи добавляли api_token
в конец строки запроса и использовали его для аутентификации своего запроса. TokenGuard позволит вам легко достичь этого.
Если вы хотите использовать аутентификацию токена, прежде всего вам нужно добавить уникальное 60-символьное поле api_token
в таблицу базы данных выбранной модели (сущность в доктрине). Теперь вы можете легко использовать api
guard в вашем приложении.
Неявная привязка модели маршрута
Одна из новых очень полезных функций Laravel 5.2 — привязка модели маршрута. Вы можете привязать модель к вашему маршруту; перед этим мы бы создали его вручную:
1
2
3
4
|
Route::get(‘user/{id}’, function ($id) {
$user = Users::findOrFail($id);
// …
});
|
Или вы можете сделать что-то вроде:
1
2
3
4
5
6
7
|
//…
$router->model(‘user’, ‘App\User’);
//…
$router->get(‘profile/{user}’, function(App\User $user) {
//
});
|
Laravel 5.2 делает это еще проще. Просто передайте параметр в закрытие маршрута, и он автоматически будет обрабатываться как привязка модели маршрута:
1
2
3
|
Route::get(‘user/{id}’, function (App\User $user) {
//…
});
|
Теперь проще привязать модель к вашему маршруту.
По умолчанию Laravel использует столбец идентификатора модели. Но если вы ожидаете, что это изменит отображение, вы можете изменить свою модель следующим образом:
1
2
3
4
5
6
7
|
class User extends Model
{
public function getRouteKeyName()
{
return ‘UserEmail’;
}
}
|
Eloquent реализует Illuminate\Contracts\Routing\UrlRoutable
, поэтому вы можете переопределить метод getRouteKeyName()
. Он определяет, какой столбец следует использовать для поиска по URL-адресу.
Группы промежуточного программного обеспечения
Как вы можете видеть в приведенном выше разделе, мы создали разную защиту для пользователей и администраторов. В этом случае, если вы хотите назначить несколько промежуточных программ для группы маршрутов пользователя или группы маршрутов администратора, Laravel 5.2 позволяет вам создать ярлык с именем ключа.
Чтобы определить группу промежуточного программного обеспечения, вы должны изменить kernel.php в вашей папке http:
1
2
3
4
5
6
7
8
|
protected $middlewareGroups = [
//…
‘admin’ => [
‘acl’,
‘web’,
‘auth’,
]
];
|
И теперь вы можете легко использовать его в своей группе маршрутов.
Промежуточное программное обеспечение для ограничения скорости Api
Если вы используете API другого приложения, такого как GitHub, для запросов, использующих обычную аутентификацию или OAuth, вы можете делать до 5000 запросов в час. Это ограничение называется ограничением скорости. Если вы хотите иметь что-то подобное в своем приложении, вы можете использовать новую функцию Laravel 5.2. В Laravel 5.2 добавлено новое промежуточное программное обеспечение throttle
которое будет обрабатывать ограничение скорости. Например, у вас может быть что-то вроде:
1
2
3
4
5
|
Route::group([‘prefix’ => ‘api’, ‘middleware’ => ‘throttle’], function () {
Route::get(‘user’, function () {
return Users::all();
});
});
|
По умолчанию промежуточное программное обеспечение throttle
допускает 60 попыток в минуту в kernel.php
:
1
2
3
4
5
|
//…
‘api’ => [
‘throttle:60,1’,
‘auth:api’,
],
|
Вы можете изменить его по своему желанию или даже настроить для конкретного маршрутизатора:
1
2
3
4
5
|
Route::group([‘prefix’ => ‘api’, ‘middleware’ => ‘throttle:10,1000’], function () {
Route::get(‘user’, function () {
return Users::all();
});
});
|
Аутентификационные леса
Laravel 5.2 предоставляет быстрый способ создать все необходимое для аутентификации с помощью этой команды:
1
|
php artisan make:auth
|
Использование этой команды в вашем новом приложении сделает регистрацию и вход в систему просмотра, а также маршруты для всех аутентификаций. Мой файл маршрута выглядит так:
1
2
3
4
|
Route::group([‘middleware’ => ‘web’], function () {
Route::auth();
Route::get(‘/home’, ‘HomeController@index’);
});
|
Метод Route::auth()
является ярлыком для определения следующих маршрутов:
01
02
03
04
05
06
07
08
09
10
11
12
13
|
// Authentication Routes…
$this->get(‘login’, ‘Auth\AuthController@showLoginForm’);
$this->post(‘login’, ‘Auth\AuthController@login’);
$this->get(‘logout’, ‘Auth\AuthController@logout’);
// Registration Routes…
$this->get(‘register’, ‘Auth\AuthController@showRegistrationForm’);
$this->post(‘register’, ‘Auth\AuthController@register’);
// Password Reset Routes…
$this->get(‘password/reset/{token?}’, ‘Auth\PasswordController@showResetForm’);
$this->post(‘password/email’, ‘Auth\PasswordController@sendResetLinkEmail’);
$this->post(‘password/reset’, ‘Auth\PasswordController@reset’);
|
Также будет сгенерирован HomeController
, который отвечает за запросы входа в систему на панели управления вашего приложения. Но вы можете настроить или удалить этот контроллер в зависимости от потребностей вашего приложения.
Проверка массива форм
Одна из интересных вещей, с которыми я работал, это данные формы массива в HTML. Если вы поместите что-то в квадратные скобки, то результирующий массив станет ассоциативным; в противном случае он будет числовым:
1
2
3
4
5
|
<form action=»» method=»POST»>
<input type=»text» name=»name[first]»>
<input type=»text» name=»name[last]»>
<input type=»submit»>
</form>
|
Результат PHP print_r($_POST)
будет:
1
2
3
4
5
6
|
array(
‘name’ => array(
‘first’ => »
‘last’ => »
)
)
|
Это поможет вам упростить процесс проверки и работы с формами. Теперь давайте посмотрим проверку для наших пользовательских полей в Laravel 5.2:
1
2
3
4
5
6
7
|
public function Validator()
{
$this->validate(Request::all(), [
‘name.*.first’ => ‘required|string’,
‘name.*.last’ => ‘string’,
]);
}
|
Возможно, вы заметили, что форма проверки — name.*.last
, со звездочкой в середине, что почти указывает на то, что вы можете добавить ключ массива или что-то еще, что вам может понадобиться.
Вывод
Laravel 5.2 был небольшим релизом, который может позволить вам работать лучше и быстрее. Как вы можете заметить, многие из этих функций также просты в освоении.