image

В самом начале этой недели, в понедельник, состоялся официальный релиз Laravel 5.2.
В новой версии были улучшены такие вещи, как авторизация, «связывание» модели с route и другие.
Более подробно под катом.



Генерация представлений для авторизации


Теперь вы можете при помощи одной команды сгенерировать чистые и совместимые с Bootstrap представления (view) для авторизации, регистрации и восстановление пароля пользователей.
php artisan make:auth


Однако, это стоит использовать лишь для новых, только что созданных, приложений.

Валидация массивов


Если вы работаете с массивом полей формы, то теперь валидатор в Laravel 5.2 умеет работать с массивами!
Например, если вы создаёте более одного пользователя за один раз, то вы можете сделать так:
$validator = Validator::make($request->all(), [
    'person.*.phone' => 'unique:users'
]);


В данном примере, каждый из пользователей должен иметь уникальный номер телефона.

Или же, если вы создаете свой Request:
    public function rules()
    {
        return [
            'person.*.phone' => 'unique:users'
        ];
    }


Неявное «связывание» модели с rout'ом


Больше никаких Route::model()!
Начиная с версии 5.2, можно простым тайп-хинтом указать, с какой моделью необходимо работать:
Route::get('/user/{user}', function (User $user) {
    return $user;
});

Важно упомянуть, что "{user}" и имя параметра, передаваемое в замыкание, должны совпадать.

Группировка middleware


Вы используете более одного middleware для нескольких ваших контроллеров? Вам надоело каждый раз перечислять их по одному? Не беда! Теперь можно их сгруппировать! Для этого, откройте файл аpp\Http\Kernel.php и вы увидите, как вы можете это сделать. Например, по-умолчанию, уже создано 2 группы middleware:
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],

    'api' => [
        'throttle:60,1',
    ],
];


Как это использовать в коде? Очень просто:
Route::group(['middleware' => ['web']], function () {
    //
});


Лимит запросов


Теперь вы можете задать лимит запросов за одну минуту с одного IP адреса:
Route::get('/api/users', ['middleware' => 'throttle:60,1', function () {
    //
}]);

В данном примере, мы ограничиваем количество запросов с одного IP до 60 в минуту.

Улучшение Global Scopes в Eloquent


В Laravel 5.2 появилась возможность создавать свои области видимости для Eloquent. Это позволяет использовать их для каждого запроса к определенной модели.

Комментарии (6)


  1. difiso
    25.12.2015 20:31
    +1

    Что вы понимаете под глобальной областью видимости? Если это Global Scopes, то они были и до этого, просто их упростили — теперь надо реализовывать метод применения Global Scope вместо двух методов применения и снятия.

    А по поводу собственно релиза. Обновил тестово проект сегодня по их инструкции. Завелось все кроме SleepingOwl v3 из-за косяка в SleepingOwl\Admin\AdminServiceProvider, но поменял в нем ::bindShare на ::singleton и все снова клево.


    1. dMarley
      25.12.2015 20:33

      Что вы понимаете под глобальной областью видимости? Если это Global Scopes, то они были и до этого, просто их упростили — теперь надо реализовывать метод применения Global Scope вместо двух методов применения и снятия.

      Да, это они. Они были, но с ними теперь проще работать.


  1. ZiggiPop
    27.12.2015 16:08
    +1

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


    1. Smile42RU
      28.12.2015 15:32

      Это один из самых популярных фреймворков на PHP. Как вы могли этого не знать?

      image


    1. dMarley
      28.12.2015 20:21

      Справедливо, стоило указать, конечно бы, но статья шла не только в PHP хаб, а по-большей степени в хаб Laravel.


  1. denver
    28.12.2015 17:10
    +1

    Лучше б автокомплит уже починили, на код c БД запросами без слез и кучи собственных /** var… */ не взглянешь:

        public function scopeUpcoming($query)
        {
            /** @var $query \Illuminate\Database\Query\Builder */
            return $query->where('start_date', '<=', Carbon::now())->where(function ($query) {
                /** @var $query \Illuminate\Database\Query\Builder */
                $query->where('end_date', '>=', Carbon::now())->orWhere(function ($query) {
                    /** @var $query \Illuminate\Database\Query\Builder */
                    $query->whereNull('end_date');
                });
            });
        }
    

    P.S. хуже всего еще то, что $query вовсе не instanceof Illuminate\Database\Query\Builder а на самом деле Illuminate\Database\Eloquent\Builder. Но подсветка работает корректнее если указывать первое.