2017-03-04 9 views
0

私が設定したデフォルトの動作ではなくそのページにリダイレクトされる/loginページにdestinationクエリパラメータを渡すことができる単純な機能を構築しています。Laravel 5でパスが有効かどうかをどのように確認しますか?

宛先はセッションに格納され、後で使用して、LoginController内でリダイレクトします。私はパスが有効であると私はリダイレクトを決定する前にそれを確認したい場合にのみリダイレクトする必要が

if ($destination = session('login_redirect')) { . 
    $route = app('router')->getRoutes()->match(app('request')->create($destination)); 
    $destination_route = route($route->getName(), $route->parameters()); 
} 

は、ここに私のスニペットです。有効であれば、Laravelが200を返すURLだということです。現在、パスが有効なときに、app('request')->create()に電話をかけて経路に経路を設定すると、(論理的に)NotFoundHttpExceptionになります。

app\Exceptions\Handler.phprender()機能でいくつかの詐欺を行う唯一の方法はありますか?もしそうなら、私は有効な404(ユーザーページリクエスト)と、プログラムでリクエストを作成することによって得られる例外とを区別する方法が明確ではない。

答えて

0

$ destination変数が設定されていて空でないかどうかをチェックして、指定された宛先にリダイレクトすることはどうでしょうか。

else($ destinationはセッションに設定されていますが、アプリに存在するどのルートにも一致しません)新しい例外をスローして任意の名前を付けてから、最後にその例外をapp/Exceptions/handler.phpにキャッチするか、このelseステートメントのデフォルトパスにリダイレクトするだけです。コードは次のようになります:

$destination = session('login_redirect') 
if ($destination && $destination != "")) { 
    try { 
     $route = app('router')->getRoutes()->match(app('request')->create($destination)); 
     $destination_route = route($route->getName(), $route->parameters()); 
    } 
    catch(Exception $e) { 
     return $e 
     // OR 
     throw new Myexception; 
    } 
} 
else { 
    return redirect("foobar"); 
    // OR 
    throw new MyException; 
} 
+0

try/catchが 'NotFoundHttpException'例外をキャッチしないため、これは機能しません。 – Justin

+0

あなたの最善の策は、そのようにあなたのhandler.phpでその例外を捕まえることができると思います。 '使用するSymfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException; if($ e instanceof NotFoundHttpException) { //あなたのものはここに } ' – Drazxier

関連する問題