Подтвердить что ты не робот

Фильтры в Laravel 5

Как мы производим фильтры в Laravel 5? Является ли идея filters уходить?

4b9b3361

Ответ 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 официальные документы.