2016-07-19 7 views
0

私は役割/許可システムを実装しました。今、私はこのような何かを行うことができますので、Laravelルータにメソッドを追加したい:Laravelルータを拡張する

Route::get('sales', '[email protected]')->allow('Salesman'); 

私は@can('Salesman')(ビュー)$user->can('Salesman')(コントローラ)を使用することができることを知っているが、私はあまり読みました私はルートファイル内のすべての役割のアクセス許可を見ることができるので、私はそれをやろうとしています。

答えて

0

ファサードを使用してルートを生成しているとき。これは非常に簡単です。ファサードは、config/app.phpfacadesアレイで無効にすることができます。

独自のFacade classを生成し、ネイティブのものと置き換えることができます。実際にはRouter classです。最後の1を拡張し、中のものを戻すことにより

  • ファサード
  • ルータ:: newRoute
  • Route

:あなたが順序で次のように拡張し、オーバーライドする必要がある機能を実装するためには、ルータのnewRouteメソッドを使用すると、Laravelのロジックを覆すことができます。

0

ルータクラスをオーバーライドして、サービスコンテナに登録して、Routeファサードで使用することができます。

より明確にする:

  • は(私はRouterクラスを考える)Laravelのルータを拡張するクラスを作成します。これを見つけるには、Routeファサードを開き、サービスプロバイダを見つけてください。そこから、ルータクラスを見つけるのは簡単なはずです。
  • そのルータを上書きするクラスを作成します。前に見つけたクラスを必ず延長してください。
  • ルータサービスを上書きするサービスプロバイダを作成します。実質的には、Routeファサードにある同じキー名でサービスを登録することを意味します。

それはそれであるはずです。あなたのサービスは、Routeファサードによって自動的に選択されます。

+0

App \ Providers \ RouteServiceProvider :: boot(App \ Router $ router)の宣言は、Illuminate \ Foundation \ Support \ Providers \ RouteServiceProvider :: bootと互換性がある必要があります。 \ Routing \ Router $ router) – Alan

+0

プロバイダーをLaravelから拡張している可能性があります。これは必要ではなく、そのような問題を引き起こす可能性があります。そのプロバイダ( 'RouteServiceProvider')でLaravelが何をするのかを読んで、それをあなたのものと同じようにしてください。しかし、あなた自身で 'Router 'を置き換えてください。 – vfsoraki

+0

私はプロバイダを拡張していません。私はlaravelルータを拡張しています。 – Alan

関連する問題