2015-04-13 17 views
5

Aktualnie tworzę pakiet w/dla Laravel 5.
Mój pakiet zawiera niestandardowe oprogramowanie pośrednie i chciałbym dodać je do tablicy $routeMiddleware klasy Kernel z mój dostawca usług pakietowych.
Ale nie mogę znaleźć sposobu, aby to zrobić.Laravel 5 rejestracja oprogramowania pośredniego od dostawcy usług pakietowych

Próbowałem utworzyć niestandardową klasę, która rozszerza klasę Kernela, a następnie mogę scalić tablicę z moją tablicą.
Ale po wyjściu z konstruktora nie jest to możliwe.

W L4 był App :: middleware, ale funkcja ta nie jest już dostępna w L5.

Czy ktoś, kto rozwiązał ten problem, pomoże mi rozwiązać ten problem?

Proszę, proszę mi powiedzieć, czy moje pytanie nie jest wystarczająco jasne, abym mógł je trochę skwitować.

+0

Jakieś rozwiązanie tego? –

+0

Jeszcze nie, wciąż szukam rozwiązania –

+0

Myślę, że znalazłem. Twój dostawca powinien rozszerzyć 'RouteServiceProvider', a następnie otrzyma instancję' $ router', która ma metodę "middleware". I możemy użyć tej metody, aby zarejestrować middleware, jak to się dzieje, gdy umieścisz je w 'Kernel': http://prntscr.com/6yau6n –

Odpowiedz

11

W usługodawcę pakietu można uzyskać dostęp do instancji routera tak:

$this->app['router'] 

Następnie można zarejestrować middleware tak:

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

umieścić ten kod w metodzie rejestru twojego dostawca usługi.

0

Można to zrobić z tych dwóch sposobów:

  • zarejestruj middle-ware wewnątrz ogólnym dostawcy middle-ware
  • Zarejestruj środkowo-ware wewnątrz pakietu Service Provider

spróbujmy najpierw przez create twój plik TestMiddleware.php w twoim folderze src i umieść go gdzieś, w moim przypadku umieść go w folderze Middle-ware, a następnie dodaj go do twojego kompozytora.json auto-ładowarka tak:

"autoload": { 

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

i napisz swój ogólny middle-ware:

namespace Vendor\Package\Middleware; 

class TestMiddleware { 

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

} 

a następnie następnie dodać środkowo-Ware do głównego projektu środkowym-Ware, w Lumen należy dodać to tak:

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

Dodaj middle-ware pakować usługodawcę

A drugi sposób tworzyć środkowy-ware i załadować go w autoloaderze jak poprzednim przykładzie, a następnie utworzyć z usługodawcą i zarejestrować swój środkowy-ware wewnątrz metody boot:

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

I wreszcie należy zarejestrować usługodawca wewnątrz głównego projektu (przykład Lumen)

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

dla tych, którzy szukają zaktualizowaną odpowiedź, w laravel 5,4 nazwałbyś następującą linię od usługodawcy.

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

Lub możesz użyć pomocnika aplikacji() jak poniżej.

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