2017-12-03 2 views
0

Ich lerne nur Laravel und jetzt bin ich bei Middleware Zeug stecken. Ich habe Klasse AdultMiddleware.php:Verwenden Sie überprüfen Alter Middleware in Laravel

<?php 
namespace App\Http\Middleware; 

use Closure; 

class AdultMiddleware 
{ 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
    if (Session::get('age') < 18) { 
     return view('search'); 
    } 

    return $next($request); 
    } 
} 

und es ist Kurzname in Kernel.php:

protected $routeMiddleware = [ 
     'adult' => \App\Http\Middleware\AdultMiddleware::class, 
]; 

Und in web.php:

Route::get('middle', array('as' => 'middle', 'age' => '16', 'before' => 'adult', function() 
{ 
    return view('welcome'); 
})); 

Wie Sie Routen sehe ich gesetzt Alter als 16, aber immer noch Rückkehr willkommen statt Suche. Was mache ich falsch? Ich weiß, es mag Neuling klingen, aber ich habe versucht zu googeln und hatte kein Glück. Deshalb frage ich hier.

Antwort

2

Zuordnung Middleware zu einer Route:

Route::get(..., ['middleware' => 'adult', ...]); 

Route::get(..., ...)->middleware('adult'); 

before ist für Filter, die seit Middleware ersetzt Filter nicht mehr in Laravel existieren.

Route::get('middle', ['as' => 'middle', 'middleware' => 'adult', function() { 
    return view('welcome'); 
}]); 

Laravel Docs - 5.2 - Middleware - Assigning Middleware to routes

Laravel Docs - 5.5 - Middleware - Assigning Middleware to routes

Wenn Ihre Middleware wird eine Session-Variable zu überprüfen, können Sie eine Route zu können, fügen Sie diese Session-Variable setzen, wie Sie möchten.

Route::get('set/age/{age}', function ($age) { 
    session(['age' => $age]); 

    return redirect()->route('middle'); 
}); 

dass die age Variable in der Sitzung festgelegt wird, und leiten Sie Ihre ‚Mitte‘ Route.

Sie können auch eine Weiterleitung an die Suchseite zurückgeben, anstatt eine Ansicht von der Middleware zurückzugeben.

+0

Ja dieser eine funktionierte, aber jetzt bekomme ich Fehler wie: 'Klasse 'App \ Http \ Middleware \ Sitzung' nicht gefunden ', mit Alter möchte ich das variable Alter einstellen, damit ich testen konnte ob die Middleware funktioniert. Es ist nur für Testzwecke – PhpNewbie

+1

Session über Ihren Klassennamen importieren. 'benutze Session;' –