Фильтры в Laravel 5
Как мы делаем фильтры в Laravel 5? Идея фильтры уходишь?
8 ответов
короткий ответ: нет, фильтры маршруту не полностью уходит в Laravel 5.0 (несмотря на некоторую вводящую в заблуждение информацию об этом). Функциональность все еще существует, чтобы вы могли использовать фильтры " до " и "после" на своих маршрутах, если хотите. Фильтр.php " файл больше не предоставляется, но вы все равно можете определить свои фильтры где - то еще, вероятно, наиболее подходящим образом в функции boot() Поставщики / RouteServiceProvider.РНР.
, middleware теперь является предпочтительным способом достижения той же функциональности. Вижу http://laravel.com/docs/master/middleware сведения о том, как использовать его.
промежуточное программное обеспечение может быть реализовано, чтобы вести себя как "до" или "после" фильтров. И он может быть применен ко всем маршрутам (называемым "глобальным промежуточным программным обеспечением") или назначен определенным маршрутам (например, добавив "'middleware' = > ' auth определения маршрутов в маршрутах.PHP-файл.
единственным существенным ограничением middleware является то, что в настоящее время он не дает вам способ передать параметры (как вы можете с фильтрами). Это означает, что вы не можете сделать что-то вроде "requirePermission:admin", например. В настоящее время существует два способа справиться с этим ограничением. Вместо этого вы можете просто использовать фильтр маршрута, как и в случае с Larvel 4.2. Или иначе, если вы предпочитаете использовать middleware, это похоже на немного взломать, но вы можете передать параметры промежуточному по, определив и получив пользовательские значения, добавленные в определение маршрута, как описано вhttp://blog.elliothesp.co.uk/coding/passing-parameters-middleware-laravel-5/.
обновление 2015-05-29: параметры промежуточного слоя доступны начиная с Laravel 5.1.
2015-06-10 обновления: фильтры маршрут были осуждены в предпочтении промежуточного и будет полностью удален с выходом Laravel 5.2 в декабре 2015 года.
-
создайте промежуточное ПО с помощью
php artisan make:middleware class_name
-
создайте короткий ключ в вашем приложении / провайдерах / RouteServiceProvider.на PHP :
protected $middleware = [ // .... 'shortName' => 'App\Http\Middleware\class_name', ];
-
теперь вы можете включить его на любой маршрут (так же, как фильтры L4):
$router->post('url', ['middleware' => 'shortName', function() { ... }]);
кажется 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
для комментариев до/после.
С ссылке выше :
На Middleware..
#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']
следует относиться к нему соответственно.
фильтры.php был удален и заменен ядром.php рядом с маршрутами.в PHP
protected $routeMiddleware = [
'auth' => 'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
];
но вы не можете напрямую добавить код фильтра напрямую, сначала необходимо создать класс промежуточного ПО (app / Http/Middleware) Тогда, но желаемый ключ в Kernel.php-файл и ссылка на собственный класс промежуточного ПО, например:
'product.check' => 'App\Http\Middleware\ProductChecker'
да, промежуточное ПО-правильное место, от Laravel 5.0 docs:
промежуточное по HTTP обеспечивает удобный механизм фильтрации HTTP запросы на ввод заявки.
Я лично думаю, что добавление промежуточного ПО-хорошая практика, но если вам когда-нибудь понадобится быстрая небольшая фильтрация для контроллера, rubyonrails-style,
сделайте следующее:
class myController{
//filters
public function myFilter()
{
//my filter's logic
}
public function __construct()
{
$this->myFilter();
//middlewares or any other code
}
}
теперь laravel 5 представил промежуточное ПО вместо фильтров, которые присутствовали в laravel 4. Я предлагаю вам следовать laravel 5 официальные документы.