В самом начале этой недели, в понедельник, состоялся официальный релиз 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)
ZiggiPop
27.12.2015 16:08+1Все это прекрасно, но уважаемые авторы новости могли бы хоть в двух словах рассказать о том, что именно представляет из себя данный продукт. Да и ссылку на официальный сайт неплохо было бы дать.
Smile42RU
28.12.2015 15:32Это один из самых популярных фреймворков на PHP. Как вы могли этого не знать?
dMarley
28.12.2015 20:21Справедливо, стоило указать, конечно бы, но статья шла не только в PHP хаб, а по-большей степени в хаб Laravel.
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. Но подсветка работает корректнее если указывать первое.
difiso
Что вы понимаете под глобальной областью видимости? Если это Global Scopes, то они были и до этого, просто их упростили — теперь надо реализовывать метод применения Global Scope вместо двух методов применения и снятия.
А по поводу собственно релиза. Обновил тестово проект сегодня по их инструкции. Завелось все кроме SleepingOwl v3 из-за косяка в
SleepingOwl\Admin\AdminServiceProvider
, но поменял в нем::bindShare
на::singleton
и все снова клево.dMarley
Да, это они. Они были, но с ними теперь проще работать.