2015-12-14 1 views
2

Je suis nouveau à Lumen et je tente d'obtenir le middleware rôle consiste à travailler à partir d'un exemple dans la documentation Lumen: http://lumen.laravel.com/docs/middleware#middleware-parametersmiddleware rôle Lumen argument manquant

Mais dès que j'ajouter le middleware à la route comme ceci:

$app->get('/', ['middleware' => 'role:editor', 'uses' => '[email protected]']); 

Je reçois l'erreur:

at Application->Laravel\Lumen\{closure}('2', 'Missing argument 3 for App\Http\Middleware\RoleMiddleware::handle()', '/Users/peter/app/Http/Middleware/RoleMiddleware.php', '17', array('request' => object(Request), 'next' => object(Closure))) in RoleMiddleware.php line 17 

Quand je retire tout le milieu ware fonctionne comme prévu

$app->get('/', ['uses' => '[email protected]']); 

En app.php:

$app->middleware([ 
    Illuminate\Cookie\Middleware\EncryptCookies::class, 
    Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
    Illuminate\Session\Middleware\StartSession::class, 
    Illuminate\View\Middleware\ShareErrorsFromSession::class, 
    Laravel\Lumen\Http\Middleware\VerifyCsrfToken::class, 
    App\Http\Middleware\RoleMiddleware::class 
]); 

App \ Http \ Middleware \ RoleMiddleware.php:

<?php 

namespace App\Http\Middleware; 

use Closure; 

class RoleMiddleware 
{ 
    public function handle($request, Closure $next, $role) // <-line 17 
    { 
     if (! $request->user()->hasRole($role)) { 
      // Redirect... 
     } 
     return $next($request); 
    } 
} 

quelqu'un Hope peut aider

+0

Afficher la classe RoleMiddleware –

+0

Ajout de la classe RoleMiddleware – Peter

Répondre

2

Semble que vous devez vous enregistrer Middleware comme RouteMiddleware donc au lieu de:

$app->middleware([ 
    Illuminate\Cookie\Middleware\EncryptCookies::class, 
    Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
    Illuminate\Session\Middleware\StartSession::class, 
    Illuminate\View\Middleware\ShareErrorsFromSession::class, 
    Laravel\Lumen\Http\Middleware\VerifyCsrfToken::class, 
    App\Http\Middleware\RoleMiddleware::class 
]); 

il doit être :

$app->middleware([ 
    Illuminate\Cookie\Middleware\EncryptCookies::class, 
    Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
    Illuminate\Session\Middleware\StartSession::class, 
    Illuminate\View\Middleware\ShareErrorsFromSession::class, 
    Laravel\Lumen\Http\Middleware\VerifyCsrfToken::class, 
]); 

$app->routeMiddleware([ 
    "role" => App\Http\Middleware\RoleMiddleware::class 
]); 

Alors ça marche bien!

0

Par l'erreur, je comprends que vous ne fournissez pas de paramètre dans votre handle(), c'est-à-dire le 3ème argument.

Votre handle() devrait ressembler à ceci.

public function handle($request, Closure $next, $role)

Le troisième paramètre $role stocke la valeur editor selon votre code

+0

La chose étrange est que c'est exactement la même "handle de fonction publique ($ request, Closure $ next, $ role)" – Peter