it-swarm.com.ru

Фильтры в Laravel 5

Как мы делаем фильтры в Laravel 5? Идея фильтры уходит?

44
JoshuaDavid

Краткий ответ - нет, фильтры маршрутов нет полностью исчезают в Laravel 5.0 (несмотря на некоторую вводящую в заблуждение информацию об этом.) Функциональность все еще существует, чтобы позволить вам использовать фильтры "до" и "после" на ваших маршрутах, если вы хотите. Файл "filters.php" больше не предоставляется, но вы все еще можете определить свои фильтры где-то еще, вероятно, наиболее подходящим образом в функции boot () файла Providers/RouteServiceProvider.php.

Однако промежуточное ПО теперь является предпочтительным способом достижения той же функциональности. Смотрите http://laravel.com/docs/master/middleware для получения информации о том, как его использовать.

Промежуточное программное обеспечение может быть реализовано так, чтобы оно работало как фильтры "до" или "после". И он может быть применен ко всем маршрутам (называемым "глобальным промежуточным программным обеспечением") или назначен определенным маршрутам (добавив "middleware" => "auth", например, к определениям вашего маршрута в вашем файле rout.php.

Единственным существенным ограничением промежуточного программного обеспечения является то, что в настоящее время он не позволяет передавать параметры (как вы можете с помощью фильтров). Это означает, что вы не можете сделать что-то вроде "requirePermission: admin", например. В настоящее время есть два способа справиться с этим ограничением. Вместо этого вы можете просто использовать фильтр маршрута, как вы это делали с Larvel 4.2. Иначе, если вы предпочитаете использовать промежуточное ПО, это выглядит как хакерство, но вы можете передавать параметры промежуточному ПО, определяя и получая пользовательские значения, добавленные в определение вашего маршрута, как описано в http: //blog.elliothesp .co.uk/кодирование/проходящие-параметры-промежуточный-Laravel-5 / .

2015-05-29 Обновление: параметры промежуточного программного обеспечения доступны, начиная с Laravel 5.1.

2015-06-10 Обновление: Фильтры маршрутов устарели в предпочтении промежуточного программного обеспечения и будут полностью удалены с выходом Laravel 5.2 в декабре 2015 года.

58
orrd
  1. Создайте промежуточное ПО с

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

    protected $middleware = [
      // ....
      'shortName'  => 'App\Http\Middleware\class_name',
    ];
    
  3. Теперь вы можете включить его для любого маршрута (так же, как фильтры L4):

    $router->post('url', ['middleware' => 'shortName', function() {
     ... 
    }]);
    
12
igaster

Кажется, что промежуточные программы заменяют фильтры для Laravel. Что касается вашего вопроса. Правильный ответ Middlewares . Думайте об этом как о слоях.

Для более подробного ответа проверьте this out.

старый ответ

Быстрый поиск показал, что 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

9
majidarif

Для комментария до/после.

Из ссылка выше:

В 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'] следует относиться к этому соответственно.

7
ugochimbo

filters.php был удален и заменен Kernel.php рядом с rout.php

protected $routeMiddleware = [
    'auth' => 'App\Http\Middleware\Authenticate',
    'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
    'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
];

Но вы не можете напрямую добавить свой код фильтра напрямую, сначала вы должны создать класс Middleware (app/Http/Middleware), а затем указать желаемый ключ в файле Kernel.php и ссылаться на его собственный класс Middleware, например:

'product.check' => 'App\Http\Middleware\ProductChecker'
3
Marwan

Да, промежуточное ПО - правильное место, из Документация Laravel 5. :

Промежуточное ПО HTTP предоставляет удобный механизм фильтрации HTTP-запросов, поступающих в ваше приложение.

2
Maykonn

Я лично считаю, что добавление промежуточного программного обеспечения является хорошей практикой, но если вам когда-нибудь понадобится быстрая небольшая фильтрация для контроллера в стиле rubyonrails,

сделать следующее:

class myController{

   //filters
   public function myFilter()
   {
      //my filter's logic
   }

   public function __construct()
   {
     $this->myFilter();
     //middlewares or any other code
   }


 }
2
Hamza Ouaghad

Теперь laravel 5 ввел промежуточное ПО вместо фильтров, которые присутствовали в laravel 4. Я предложу вам следовать laravel 5 официальные документы .

1
Lakin Mohapatra