Статьи

Новые функции в Laravel 5.2

В этой статье я рассмотрю новые возможности 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 другого приложения, такого как 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 был небольшим релизом, который может позволить вам работать лучше и быстрее. Как вы можете заметить, многие из этих функций также просты в освоении.