Фильтры в 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 года.


  1. создайте промежуточное ПО с помощью

    php artisan make:middleware class_name
    
  2. создайте короткий ключ в вашем приложении / провайдерах / RouteServiceProvider.на PHP :

    protected $middleware = [
      // ....
      'shortName'  => 'App\Http\Middleware\class_name',
    ];
    
  3. теперь вы можете включить его на любой маршрут (так же, как фильтры 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 официальные документы.