Новые возможности в PHP Laravel 5.2

В этой статье мы рассмотрим новые особенности PHP Laravel 5.2 и расскажем о них по порядку. Новые возможности перечислены ниже:

laravel 5
  • Неявная привязка модели
  • Проверка массива формы
  • Ограничение скорости запросов API
  • Группы посредников
  • Заготовка авторизации
  • Множественные драйверы защиты авторизации

Множественные драйверы защиты авторизации

Если вам нужно иметь Doctrine ORM авторизацию с несколькими провайдерами, то вам пригодится новая функция Laravel 5.2. В своих проектах я предпочитаю разделять права администратора и аутентификацию пользователей; эта функция поможет мне упростить эту задачу. Ниже приведен пример файла config/auth.php:

//...
    '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 будет вызывать стандартный guard; поэтому если вы хотите использовать специальный guard, просто вызовите его по имени, например Auth::guard('admin').

Для аутентификации вашей группы маршрута, вместе с новым Guard, вы просто можете вызвать его по имени:

Route::group(['middleware' =>['auth:admin']], function () {
//...
}

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

Если вы хотите использовать проверку подлинности по токенам, в первую очередь вам нужно добавить 60-символьное поле с уникальным api_token в таблицу базы данных выбранной модели. Теперь вы можете легко использовать api guard в вашем приложении.

Неявная привязка модели

Одной из самых практичных особенностей Laravel 5.2 является - неявная привязка модели. Вы можете привязать модель к вашему маршруту; до этого момента, мы делали это вручную:

Route::get('user/{id}', function ($id) {
    $user = Users::findOrFail($id);
    // ...
});

Второй вариант:

 //...
  $router->model('user', 'App\User');
  //...
 
  $router->get('profile/{user}', function(App\User $user) {
    //
});

Laravel 5.2 сделает его еще проще. Просто передаете параметр ближайшего маршрута, и он будет автоматически рассматривать его в качестве стандартной привязки модели:

Route::get('user/{id}', function (App\User $user) {
    //...
});

По умолчанию, Laravel использует ID колонки модели. Но если вы будете менять отображение, вы можете изменить свою модель следующим образом:

class User extends Model 
{
    public function getRouteKeyName()
    {
        return 'UserEmail';
    }
}

Группы посредников

В разделе выше, мы создали отдельный guard для пользователя и администратора. В этом случае, необходимо будет назначить группы посредников для маршрута группы пользователей или администраторов, Laravel 5.2 позволяет создать ярлык с именем ключа.

Для того, чтобы определить группу посредников, вы должны изменить файл kernel.php:

protected $middlewareGroups = [
     //...
    'admin' => [
        'acl',
        'web',
        'auth',
    ]
];

Ограничение скорости запросов API Laravel 5.2

Если вы используете API другого приложения, например GitHub, для создания запросов, использующих обычную проверку подлинности или OAuth, вы можете сделать до 5000 запросов в час. Это ограничение называется ограничением скорости. Если вам нужен такой метод в вашем приложении, вы можете использовать новую функцию Laravel 5.2 которая будет обрабатывать ограничения скорости. Пример:

Route::group(['prefix' => 'api', 'middleware' => 'throttle'], function () {
    Route::get('user', function () {
        return Users::all();
    });
});

По умолчанию throttle отправляет 60 запросов в минуту в kernel.php:

//...
    'api' => [
        'throttle:60,1',
        'auth:api',
    ],

Вы можете изменить это следующим образом:

Route::group(['prefix' => 'api', 'middleware' => 'throttle:10,1000'], function () {
    Route::get('user', function () {
        return Users::all();
    });
});

Заготовка авторизации

Laravel 5.2 обеспечивает быстрый способ создания заготовки авторизации, все что нужно для проверки подлинности, с помощью следующей команды:

php artisan make:auth

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

Route::group(['middleware' => 'web'], function () {
    Route::auth();
    Route::get('/home', 'HomeController@index');
});

Метод Route::auth() представляет собой ярлык для определения следующих маршрутов:

// Аутентификация
$this->get('login', 'Auth\AuthController@showLoginForm');
$this->post('login', 'Auth\AuthController@login');
$this->get('logout', 'Auth\AuthController@logout');
 
// Регистрация
$this->get('register', 'Auth\AuthController@showRegistrationForm');
$this->post('register', 'Auth\AuthController@register');
 
// Сброс пароля
$this->get('password/reset/{token?}', 'Auth\PasswordController@showResetForm');
$this->post('password/email', 'Auth\PasswordController@sendResetLinkEmail');
$this->post('password/reset', 'Auth\PasswordController@reset');

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

Проверка массива формы

Одна из самых интересных вещей с которыми я работал, это массив данных формы в HTML. Если вы разместите информацию в квадратных скобках, тогда результирующий массив становится ассоциативным; в противном случае, он будет числовым:

<form action="" method="POST">
    <input type="text" name="name[first]">
    <input type="text" name="name[last]">
    <input type="submit">
</form>

Результат в PHP print_r($_POST) выглядит следующим образом:

array(
     'name' => array(
         'first' => ''
         'last' => ''
     )
 )

Это поможет значительно упростить процесс проверки и работы с формами. Теперь давайте рассмотрим проверку для наших пользовательских полей в Laravel 5.2:

public function Validator()
{
    $this->validate(Request::all(), [
        'name.*.first' => 'required|string',
        'name.*.last' => 'string',
    ]);
}

Перевод статьи New Features in Laravel 5.2

Тэги: PHPlaravel

Вход

Уважаемый пользователь! Мы обнаружили, что вы используете AdBlock и вынуждены скрыть часть материалов на нашем сайте. Siteacademy существует и развивается за счет доходов от рекламы. Просим внести наш сайт в список исключений или отключить Блокировщик рекламы на нашем сайте.