2015-04-13 21 views
5

sto attualmente sviluppando un pacchetto in/per laravel 5.
mio pacchetto contiene un middleware personalizzato e vorrei aggiungere alla $routeMiddleware gamma della classe Kernel da in il mio pacchetto Service Provider.
Ma non riesco a trovare un modo per farlo.laravel 5 registro middleware dal fornitore di servizi nel pacchetto

Ho provato a creare una classe personalizzata che estende la classe Kernel e quindi posso unire l'array con il mio array.
Ma una volta fuori dal costruttore non è possibile.

In L4 c'era l'app :: middleware, ma quella funzione non è più disponibile in L5.

Chiunque abbia risolto questo problema può aiutarmi a risolvere questo problema?

Per favore, dimmi se la mia domanda non è abbastanza chiara, in modo da poter chiarire un po '.

+0

Qualche soluzione per questo? –

+0

Non ancora, sto ancora cercando una soluzione –

+0

Penso di averlo trovato. Il tuo provider dovrebbe estendere 'RouteServiceProvider', quindi riceverà un'istanza di' $ router' che ha il metodo 'middleware'. E possiamo usare questo metodo per registrare i middleware come succede quando li mettiamo in 'Kernel': http://prntscr.com/6yau6n –

risposta

11

Nel vostro fornitore di servizi pacchetto è possibile accedere all'istanza router in questo modo:

$this->app['router'] 

successivo è possibile registrare middleware come questo:

$this->app['router']->middleware('middlewareName', 'your\namespace\MiddlewareClass'); 

si inserire questo codice nel metodo registro del vostro fornitore di servizi.

0

È possibile farlo con questi due modi:

  • Iscrivere il vostro middleware all'interno del vostro generale fornitore di middleware
  • registro medio-ware all'interno del vostro Service Provider pacchetto

proviamo prima uno di create il tuo file TestMiddleware.php nella cartella del tuo pacchetto src e inseriscilo da qualche parte, nel mio caso l'ho messo nella cartella Middle-ware e poi lo aggiungo al tuo compositore.JSON auto-loader in questo modo:

"autoload": { 

    "psr-4": { 
      "Vendor\\Package\\Middleware": "packages/Vendor/Package/src/Middleware" 
    } 
} 

e scrivere il generale middle-ware:

namespace Vendor\Package\Middleware; 

class TestMiddleware { 

    public function handle($request, Closure $next) { 
     echo 'hello, world!'; 
    } 

} 

E poi quindi aggiungere il Medio-ware al principale progetto di middleware, nella Lumen si dovrebbe aggiungere in questo modo:

$app->middleware([ 
    Vendor\Package\Middleware\TestMiddleware::class 
]); 

Aggiungi middle-ware per confezionare fornitore di servizi

E il secondo modo, creare middle-ware e caricarlo nel caricatore automatico come lo scorso esempio e quindi creare un fornitore di servizi e registrare il middleware all'interno metodo di avvio:

public function boot() 
{ 
     $this->app->middleware([ 
       \Vendor\Package\Middleware\TestMiddleware::class 
     ]); 
} 

E infine è necessario registrarsi il fornitore di servizi all'interno del vostro progetto principale (Lumen esempio)

$app->register(Vendor\Package\TestServiceProvider::class); 
10

per chi cerca una risposta aggiornata, in laravel 5.4 si chiamerebbe la seguente riga da un fornitore di servizi.

$this->app['router']->aliasMiddleware('scopes', \Modules\Auth\Http\Middleware\CheckScopes::class); 

Oppure è possibile utilizzare l'helper app() come di seguito.

app('router')->aliasMiddleware('scopes', \Modules\Auth\Http\Middleware\CheckScopes::class);