ミドルウェアのアイデアをすべてスキップして、ユーザーのルートを照会してページに表示することで、データベースから取り除くことになります。私はサービスプロバイダを使用してこれを達成します。
ユーザーのナビゲーション要素を含む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
と呼ばれます。そうでない場合、それらを追加することを検討するかもしれません。
これだけです。サービスプロバイダを使用して、ビューファイルをいつでも特定のデータにアクセスできるようにすることができます。
これが役に立ちます。