0

Laravel 5.4では、Webミドルウェアはデフォルトですべてのルートに含まれています。しかし、私はそれらのルート(メニュー)をユーザーに割り当てることを示したいと思います。laravelの特定のルートのWebミドルウェア5.2

user\list 
user\add 
user\show_form 
list\forms 

を次のようにユーザー「ABC」がメニューにすることをログインしているときに、ユーザ「ABC」のように

`user\list` 
`user\add` 

のような2つだけのルート(メニューの)を割り当てた場合 のために私はいくつかのルート(メニューの)を持っています割り当てられたルート(メニュー)が2つだけ表示されます。ユーザーがその時間を作成するとき、私はルート(メニュー)を割り当て、これを許可テーブルに保存します。今私の質問は、私がミドルウェアを使ってこれを処理する方法です。 これはミドルウェアを介して可能なハンドルですか。私に教えてください ありがとうございます。

答えて

1

ミドルウェアのアイデアをすべてスキップして、ユーザーのルートを照会してページに表示することで、データベースから取り除くことになります。私はサービスプロバイダを使用してこれを達成します。

ユーザーのナビゲーション要素を含むuser-navigation.blade.phpファイルをプロジェクトに設定したとします。多分何か:

<ul class="side-nav"> 
    <li> 
     <a href="/user/list">List</a> 
    </li> 
    <li> 
     <a href="/user/add">Add</a> 
    </li> 
</ul> 

そして、あなたは@include('user-navigation')を使用して他のブレード・テンプレートにそのファイルをもたらしています。

私たちがやりたいことは、ビュー(ユーザーナビゲーション)がユーザーに表示されるときはいつでも、現在のユーザーのルートのクエリを実行することです。私たちはサービスプロバイダと簡単にこれを行うことができます。

端末で次のコマンドを実行してください:php artisan make:provider UserNavigationServiceProvider。次に、実際にこのサービスプロバイダを使用するようLaravelに伝える必要があります。 config/app.phpを開き、「Application Service Providers」と表示されている領域までスクロールし、これにApp\Providers\UserNavigationServiceProvider::class,を追加します。ここで見つけたファイルを編集してくださいapp\Providers\UserNavigationServiceProvider.php

Laravelのデフォルトの認証を使用している場合は、ファイルの上部にあるuse Auth;を持ってきてください。また、permissionsテーブルのモデルをインポートする必要があります。したがって、このファイルの先頭にuse App\Permission;を入れてください。

さて、boot()方法では、それは次のようになります

public function boot() 
{ 
    $this->getUserNavigation(); 
} 

次に、我々はgetUserNavigation()メソッドを作成しようとしています。ただ、register()法の下に、これを追加します。

private function getUserNavigation() 
{ 
    view()->composer('user-navigation', function($view) 
    { 
     $userID = Auth::id(); 

     $userNavigation = ! is_null($userID) ? Provider::where('user_id', $userID)->get() : null; 

     $view->with([ 'userNavigation' => $userNavigation ]); 
    }); 
} 

だから私たちは、この新しい方法でやっていることを打破することができます。まず、user-navigationという名前でビューをターゲティングするとします。このビューがロードされるたびに、このクロージャでロジックを実行します。次に、既定のLaravel Auth方法を使用して現在のユーザーのIDを取得し、Eloquentを使用してpermissionsテーブルのクエリを実行します。 注:permissionsテーブルの列がuser_idであると仮定しています。このクエリは、テーブルにそのユーザーが所有するすべてのレコードのコレクションを提供します。その結果を変数$userNavigationにバインドし、user-navigation$userNavigationとして渡します。注:user-navigation.blade.phpを別のファイルに含めるので、そのファイルにはこの$userNavigation変数にもアクセスできます。

今、user-navigation.blade.phpでロジックを書き込むことができます。最初に、変数がnullかどうかを確認します。ログインしていないユーザーがわかっている場合は、と表示されない場合は、このビューにアクセスすることもできます。それから、ループして結果を表示するだけです。上記の例では

@if ($userNavigation) 
<ul class="side-nav"> 
    @foreach($userNavigation as $navItem) 
    <li> 
     <a href="{{ $navItem->url }}">{{ $navItem->url_name }}</a> 
    </li> 
    @endforeach 
</ul> 
@endif 

私はあなたがデータベース列を持っているを想定していますが、リンクして、アンカーリンクのテキストを格納しているurl_nameという列を格納しているところurlと呼ばれます。そうでない場合、それらを追加することを検討するかもしれません。

これだけです。サービスプロバイダを使用して、ビューファイルをいつでも特定のデータにアクセスできるようにすることができます。

これが役に立ちます。

関連する問題