web-dev-qa-db-fra.com

Filtres dans Laravel 5

Comment fabrique-t-on des filtres dans Laravel 5? Est-ce que l'idée de filtres = disparaît?

44
JoshuaDavid

La réponse courte est non, les filtres d’itinéraire sont pas s’éloignent complètement dans Laravel 5.0 (malgré quelques informations trompeuses à ce sujet) La fonctionnalité existe toujours pour vous permettre d’utiliser les filtres "avant" et "après" sur vos itinéraires si vous le souhaitez. Le fichier "filters.php" n’est plus fourni, mais vous pouvez toujours définir vos filtres ailleurs, probablement dans la fonction boot () de Providers/RouteServiceProvider.php.

Cependant , le middleware est désormais le moyen privilégié pour obtenir la même fonctionnalité. Voir http://laravel.com/docs/master/middleware pour plus d'informations sur son utilisation.

Un middleware peut être implémenté pour se comporter comme des filtres "avant" ou "après". Et il peut être appliqué à toutes les routes (appelées "middleware global") ou assigné à des routes spécifiques (en ajoutant "'middleware" => "auth" ", par exemple, aux définitions de votre route dans votre fichier routes.php.

La seule limitation significative du middleware est que il ne vous donne actuellement pas le moyen de passer des paramètres (comme vous pouvez le faire avec des filtres). Cela signifie que vous ne pouvez pas faire quelque chose comme "requirePermission: admin" par exemple. Il existe actuellement deux manières de traiter cette limitation. Vous pouvez simplement utiliser un filtre de route à la place, comme vous l'avez fait avec Larvel 4.2. Sinon, si vous préférez utiliser un middleware, cela ressemble à un hack, mais vous pouvez passer des paramètres au middleware en définissant et en récupérant les valeurs personnalisées ajoutées à la définition de votre route, comme expliqué à la section http: //blog.elliothesp .co.uk/coding/pass-parameters-middleware-laravel-5 / .

2015-05-29 Mise à jour: Paramètres du middleware sont disponibles à partir de Laravel 5.1.

2015-06-10 Mise à jour: Les filtres de route ont été déconseillés en priorité par les middleware et seront entièrement supprimés avec la publication de Laravel 5.2 en décembre 2015.

58
orrd
  1. Créer un middleware avec

    php artisan make:middleware class_name
    
  2. Créez une clé abrégée dans votre application/Fournisseurs/RouteServiceProvider.php:

    protected $middleware = [
      // ....
      'shortName'  => 'App\Http\Middleware\class_name',
    ];
    
  3. Vous pouvez maintenant l'activer sur n'importe quelle route (comme les filtres L4):

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

Il semble que des middlewares remplacent les filtres de Laravel. Quant à ta question. La bonne réponse est Middlewares . Pensez-y comme des couches.

Pour une réponse plus détaillée, consultez this out.

ancienne réponse

Une recherche rapide a montré que requests était le nouveau moyen de validation. Mais je ne suis pas sûr que votre cas d'utilisation puisse s'appliquer à cela.

Laravel 5 introduit la notion de "demandes". Il s’agit d’encapsuler la logique que vous effectueriez dans le cadre d’une requête HTTP, mais qui ne se résume pas à un filtre de route. Un candidat de choix: la validation des données.

Une façon de procéder à la pré-validation (filtre) consiste à utiliser la méthode 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;
    }

}

Il existe une méthode rules () qui renvoie un tableau de règles que vous transmettriez avant à Validator :: make (), ainsi qu’une méthode authorize () dans laquelle vous donneriez une autorisation utilisateur. Habituellement, vous voulez que tous les utilisateurs puissent s’inscrire, vous devez donc simplement renvoyer true.

Tiré de Quoi de neuf à Laravel 5

9
majidarif

Pour le commentaire avant/après.

À partir du lien ci-dessus:

En 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;
}

En utilisant ['middleware' => 'shortName'] devrait le traiter en conséquence.

7
ugochimbo

filters.php a été supprimé et remplacé par Kernel.php à côté de routes.php

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

Mais vous ne pouvez pas ajouter directement votre code de filtre directement, vous devez d'abord créer une classe Middleware (app/Http/Middleware) Ensuite, la clé de votre choix dans le fichier Kernel.php et faire référence à sa propre classe Middleware, telle que:

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

Oui, le middleware est le bon endroit, à partir de Laravel 5.0 docs :

Les intergiciels HTTP constituent un mécanisme pratique pour filtrer les demandes HTTP entrant dans votre application.

2
Maykonn

Personnellement, je pense que l'ajout d'un middleware est une bonne pratique, mais si vous avez besoin d'un petit filtrage rapide pour un contrôleur, à la manière de rubyonrails,

faire comme suit:

class myController{

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

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


 }
2
Hamza Ouaghad

Maintenant laravel 5 a introduit le middleware au lieu des filtres présents dans laravel 4. Je vous suggère de suivre laravel 5 document officiel .

1
Lakin Mohapatra