it-swarm.com.de

Filter in Laravel 5

Wie machen wir Filter in Laravel 5? Geht die Idee von Filter weg?

44
JoshuaDavid

Die kurze Antwort ist nein, Routenfilter werden nicht vollständig entfernt in Laravel 5.0 (trotz einiger irreführender Informationen) Die Funktionalität, auf Ihren Routen Vorher- und Nachher-Filter zu verwenden, ist weiterhin vorhanden. Die Datei "filters.php" wird jedoch nicht mehr bereitgestellt Sie können Ihre Filter immer noch an einer anderen Stelle definieren, wahrscheinlich am besten in der boot () - Funktion von Providers/RouteServiceProvider.php.

Allerdings ist Middleware jetzt der bevorzugte Weg, um die gleiche Funktionalität zu erreichen. Informationen zur Verwendung finden Sie unter http://laravel.com/docs/master/middleware .

Middleware kann so implementiert werden, dass sie sich entweder wie "Vorher" - oder "Nachher" -Filter verhält. Und es kann auf alle Routen angewendet werden (als "globale Middleware" bezeichnet) oder bestimmten Routen zugewiesen werden (indem "'middleware' => 'auth'" beispielsweise zu Ihren Routendefinitionen in Ihrer Datei routes.php hinzugefügt wird.

Die einzige wesentliche Einschränkung der Middleware ist, dass Sie können derzeit keine Parameter übergeben (wie bei Filtern). Dies bedeutet, dass Sie beispielsweise nicht "requirePermission: admin" ausführen können. Es gibt derzeit zwei Möglichkeiten, um mit dieser Einschränkung umzugehen. Sie können stattdessen einfach einen Routenfilter verwenden, so wie Sie es mit Larvel 4.2 getan haben. Wenn Sie Middleware bevorzugen, fühlt sich dies wie ein Hack an, aber Sie können Parameter an die Middleware übergeben, indem Sie benutzerdefinierte Werte definieren und abrufen, die zu Ihrer Routendefinition hinzugefügt wurden, wie unter http: //blog.elliothesp .co.uk/Kodierung/Übergabe-Parameter-Middleware-Laravel-5 / .

2015-05-29 Update: Middleware-Parameter sind verfügbar ab Laravel 5.1.

10.06.2015 Update: Routenfilter werden mit der Veröffentlichung von Laravel 5.2 im Dezember 2015.

58
orrd
  1. Erstellen Sie eine Middleware mit

    php artisan make:middleware class_name
    
  2. Erstellen Sie eine Kurztaste in Ihrer App/Providers/RouteServiceProvider.php:

    protected $middleware = [
      // ....
      'shortName'  => 'App\Http\Middleware\class_name',
    ];
    
  3. Sie können es jetzt für jede Route aktivieren (genau wie die L4-Filter):

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

Es scheint, als ob Middlewares Filter für Laravel ersetzen. Wie für Ihre Frage. Die richtige Antwort lautet Middlewares . Betrachten Sie es als Schichten.

Für eine detailliertere Antwort check this out.

alte Antwort

Eine schnelle Suche ergab, dass requests die neue Art der Validierung ist. Ich bin mir aber nicht sicher, ob Ihr Anwendungsfall darauf zutreffen kann.

Laravel 5 führt den Begriff "Anfragen" ein. Dies ist eine Zusammenfassung der Logik, die Sie als Teil einer HTTP-Anforderung ausführen würden, die jedoch mehr als nur ein Routenfilter ist. Ein Hauptkandidat: Datenvalidierung.

Eine Möglichkeit zur Vorabvalidierung (Filter) ist die Verwendung der Methode 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;
    }

}

Es gibt eine rules () -Methode, die ein Array von Regeln zurückgibt, die Sie vor der Übergabe an Validator :: make () übergeben haben, sowie eine authorize () -Methode, mit der Sie eine Benutzerberechtigung erteilen können. Normalerweise möchten Sie, dass sich alle Benutzer registrieren können, und geben einfach true zurück.

Entnommen aus Was ist neu in Laravel 5

9
majidarif

Für den Kommentar zu vorher/nachher.

Aus dem Link oben:

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

Mit ['middleware' => 'shortName'] sollte es entsprechend behandeln.

7
ugochimbo

filters.php wurde entfernt und durch "Kernel.php" neben "routes.php" ersetzt

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

Aber Sie können Ihren Filtercode nicht direkt hinzufügen, Sie sollten zuerst eine Middleware-Klasse erstellen (app/Http/Middleware) Dann aber Ihren gewünschten Schlüssel in der Kernel.php-Datei und auf eine eigene Middleware-Klasse verweisen, wie zB:

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

Ja, Middleware ist der richtige Ort, von Laravel 5.0 docs :

HTTP-Middleware bietet einen praktischen Mechanismus zum Filtern von HTTP-Anforderungen, die in Ihre Anwendung eingehen.

2
Maykonn

Ich persönlich halte das Hinzufügen einer Middleware für eine gute Praxis, aber wenn Sie jemals eine schnelle kleine Filterung für einen Controller im Rubyonrails-Stil benötigen,

wie folgt vorgehen:

class myController{

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

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


 }
2
Hamza Ouaghad

Jetzt hat laravel 5 Middleware anstelle von Filtern eingeführt, die in laravel 4 vorhanden waren. Ich schlage Ihnen vor, laravel zu folgen 5 offizielle Dokumente .

1
Lakin Mohapatra