2017-05-18 3 views
1

たとえば、私のUserクラスでは、ユーザーテーブルの列にあるユーザーの役割の値をチェックする 'isAdmin'機能があります。このため、ミドルウェアを使用する必要はありません。私は、ユーザーが、私は私の見解では、このような何かをします私のアプリケーション内の特定のポストの所有者であるかどうかを確認したい場合は
は:
Laravel:なぜミドルウェアを使うべきですか?

@if(Auth::user()->id == $user->id) //$user is the passed user to the view 
    <p>I am the owner of the post</p> 
@elseif(Auth::guest()) 
    <p>I'm a visitor</p> 
@else 
    <p>I'm a registered user visiting this post</p> 

私は右またはI何か間違ったことをやっているだろうか?

+0

私は2週間前にそれを習い始め、laravelの専門家ではないが、私はあなたが正しくないと思います。ミドルウェアは何かの前に何かをする、失敗しない場合、実行が正常に続行される場合、あるいはIPチェックやプロキシを行う場合があります。私はあなたの意見が正しいとは思わない、 '$ post'(このモデルが存在すれば、それはそうでなければならない)owner/user_idを' $ post-> user_id'のようにチェックしてください。 – matiaslauriti

+0

https://philsturgeon.uk/php/2016/05/31/why-care-about-php-middleware/ –

答えて

3

ミドルウェアの大きな利点の1つは、route groupに一連のロジックを適用でき、そのコードを各コントローラメソッドに追加する必要がないことです。

コントローラでは、管理者であるかどうかを確認する必要はありません。ミドルウェアのチェックに合格した場合にのみ、ルートにアクセスすることができます。

+1

この回答をありがとう..ですので、**/admin **(EX :/ admin/dashboardまたは/ admin/userslist/blahblah)はミドルウェアを渡す必要がありますか? –

+0

はい、ルートグループが自動的にそれを行います。 –

1

ミドルウェアはコントローラアクションの呼び出し前にコールするので、フィルタリクエストとして使用されるか、何らかの条件に基づいてリクエストから来ない外部データを追加します。

ここでは簡単な例を示します。

@if(Auth::user()->id == $user->id) //$user is the passed user to the view 
    <p>I am the owner of the post</p> 
@elseif(Auth::guest()) 
    <p>I'm a visitor</p> 
@else 
    <p>I'm a registered user visiting this post</p> 

ユーザーがオーナー、訪問者またはゲストであることを表示する場合は、コードを何回書き込む必要がありますか?私はすべてコントローラまたはを表示するとと表示されます。コントローラーの書き込みにミドルウェアのコードを書き、表示するルートのグループにミドルウェアを適用するのが良いと思います。あなたのミドルウェアで

public function handle($request, Closure $next) 
{ 
    @if(Auth::user()->id == $user->id) 
    $user_type = "<p>I am the owner of the post</p>"; 
    @elseif(Auth::guest()) 
    $user_type = "<p>I'm a visitor</p>"; 
    @else 
    $user_type = "<p>I'm a registered user visiting this post</p> "; 

    $request -> attributes('user_type' => $user_type); 

    return $next($request); 
} 

だから、」今、あなたのコントローラにあなたが$user_typeにアクセスし、表示する渡すことができます。あなたのビュー

{{ $user_type }} 
関連する問題