Как мы производим фильтры в Laravel 5? Является ли идея filters уходить?
Фильтры в Laravel 5
Ответ 1
Короткий ответ - нет, фильтры маршрутов не полностью уходят в Laravel 5.0 (несмотря на некоторые вводящие в заблуждение сведения об этом). Функциональность все еще существует, чтобы вы могли использовать фильтры "до" и "после" на своих маршрутах, если хотите. Файл "filters.php" больше не предоставляется, но вы все равно можете определить свои фильтры где-то еще, возможно, наиболее подходящим образом в функции boot() Providers/RouteServiceProvider.php.
Однако, промежуточное программное обеспечение теперь является предпочтительным способом достижения такой же функциональности. Подробнее о том, как его использовать, см. http://laravel.com/docs/master/middleware.
Средство промежуточного уровня может быть реализовано так, чтобы вести себя как фильтры "до" или "после". И он может применяться ко всем маршрутам (так называемое "глобальное промежуточное ПО" ) или назначается определенным маршрутам (добавив "middleware" = > "auth", например, к определениям маршрутов в файле routes.php.
Единственным существенным ограничением промежуточного программного обеспечения является то, что он в настоящее время не дает вам возможности передавать параметры (как вы можете, с фильтрами). Это означает, что вы не можете сделать что-то вроде "requirePermission: admin", например. В настоящее время существует два способа борьбы с этим ограничением. Вместо этого вы можете просто использовать фильтр маршрутов, как и с Larvel 4.2. Или иначе, если вы предпочитаете использовать промежуточное программное обеспечение, это кажется немного взломанным, но вы можете передавать параметры промежуточному программному обеспечению, определяя и извлекая пользовательские значения, добавленные в определение маршрута, как описано в http://blog.elliothesp.co.uk/coding/passing-parameters-middleware-laravel-5/.
2015-05-29 Обновление: Параметры промежуточного ПО доступны начиная с версии Laravel 5.1.
2015-06-10 Обновление: Фильтры маршрутов устарели, предпочитая промежуточное ПО, и будут полностью удалены выпуском Laravel 5.2 в декабре 2015 года.
Ответ 2
-
Создайте промежуточное ПО с
php artisan make:middleware class_name
-
Создайте короткий ключ в приложении/Провайдерах/RouteServiceProvider.php:
protected $middleware = [ // .... 'shortName' => 'App\Http\Middleware\class_name', ];
-
Теперь вы можете включить его для любого маршрута (как и фильтры L4):
$router->post('url', ['middleware' => 'shortName', function() { ... }]);
Ответ 3
Кажется, что middlewares заменяют фильтры для Laravel. Что касается вашего вопроса. Правильный ответ Middlewares. Подумайте об этом как о слоях.
Для более подробного ответа проверьте этот.
старый ответ
Быстрый поиск показал, что requests
является новым способом проверки. Но я не уверен, применит ли ваш случай использования.
Laravel 5 вводит понятие "запросы". Это завершает логику, которую вы выполняете как часть HTTP-запроса, но больше, чем просто фильтр маршрута. Главный кандидат: проверка данных.
Один из способов сделать предварительную проверку (фильтр) - это использовать метод authorize()
.
<?php namespace App\Http\Requests\Auth;
use Illuminate\Foundation\Http\FormRequest;
class RegisterRequest extends FormRequest {
public function rules()
{
return [
'email' => 'required|email|unique:users',
'password' => 'required|confirmed|min:8',
];
}
public function authorize()
{
return true;
}
}
Представляет собой метод rules(), который возвращает массив правил, которые вы ранее передавали бы в метод Validator:: make(), а также метод authorize(), в котором вы предоставляли бы любую авторизацию пользователя. Обычно вы хотите, чтобы все пользователи могли регистрироваться, поэтому просто просто возвращаете true.
Взято из Что нового в Laravel 5
Ответ 4
Для комментариев до/после.
От ссылки выше:
В промежуточном ПО..
#Before
public function handle($request, Closure $next)
{
//Do stuff
return $request;
}
#After
public function handle($request, Closure $next)
{
$response = $next($request);
// Do stuff {on $response}
return $response;
}
Использование ['middleware' => 'shortName']
должно относиться к нему соответствующим образом.
Ответ 5
filters.php удален и заменен на Kernel.php рядом с route.php
protected $routeMiddleware = [
'auth' => 'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
];
Но вы не можете напрямую добавить свой код фильтра напрямую, вы должны сначала создать класс Middleware (приложение/Http/Middleware) Затем, но ваш желаемый ключ в файле Kernel.php и укажите его собственный класс промежуточного ПО, например:
'product.check' => 'App\Http\Middleware\ProductChecker'
Ответ 6
Да, промежуточное ПО - это правильное место, от Laravel 5.0 docs:
HTTP-промежуточное ПО обеспечивает удобный механизм фильтрации HTTP запросы, поступающие в ваше приложение.
Ответ 7
Я лично считаю, что добавление промежуточного ПО - хорошая практика, но если вам когда-нибудь понадобится быстрая небольшая фильтрация для контроллера, стиль rubyonrails,
выполните следующие действия:
class myController{
//filters
public function myFilter()
{
//my filter logic
}
public function __construct()
{
$this->myFilter();
//middlewares or any other code
}
}
Ответ 8
Теперь laravel 5 представил промежуточное программное обеспечение вместо фильтров, которые присутствовали в laravel 4. Я предлагаю вам следовать laravel 5 официальные документы.