2017-11-02 12 views
0

をlaravel>それはあまりにも多くのエラーアクションここリダイレクトあまりにも多くの時間が、私はredirect-を使用しようと

try { 
    //If check urL category null 
    if (is_null($category)){ 
     Log::error("[Front] [email protected] : notfound public category "); 

     //error redirect 
     return redirect()->action('Front\[email protected]', $url); 
    } 
} catch (\Exception $e) { 
    return 'error'; 
} 

は私web.php

Route::get('/{url?}', '[email protected]'); 
    Route::get('/{name?}', '[email protected]')->name('promotiondetail'); 

である私のコントローラにリダイレクト私はfucntionを作ってみますURLが空の場合、リダイレクトアクションを使用します。

答えて

1

ルートはどちらも同じで、最初のルートのみが一致します。

アクションにリダイレクトすると、Laravelはあなたの行動を解決するため、ルート名にリダイレクトするのと同じです(これはより防御的です)。ちなみに、2番目のパラメータは配列でなければなりません。

return redirect()->action('Front\[email protected]', $url); 

あなたがやりたい、あなたは1つのcatchAllアクションを必要とし、あなたのロジックに基づいて異なる応答を返す:

/** 
* @param $string 
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View 
*/ 
public function catchAllAction($string) 
{ 
    $page = Page::whereHas('translations', function ($query) use ($string) { 
     $query->where('locale', App::getLocale())->where('slug', $string); 
    })->first(); 

    if ($page) { 
     return $this->showPage($page); 
    } 

    $news = News::whereHas('translations', function ($query) use ($string) { 
     $query->where('locale', App::getLocale())->where('slug', $string); 
    })->first(); 

    if ($news) { 
     return $this->showSingleNews($news); 
    } 

    throw new NotFoundHttpException('This page does not exist'); 
} 
+0

は空のルート1のキャッチがルート2へのリダイレクトの場合、どのような方法ですか? – test1321

+0

ですので、 'redirect() - > route( 'promotiondetail'、$ url);と同じです。 – test1321

+0

2つのルートとリダイレクトを作成するのではなく、ただ1つの応答しか返さないので、私の更新された回答を確認してください:) – lchachurski

0

あなたは経路競合があり、毎回最初の経路を呼び出します。 経路を変更してください。

+0

は、あなたがルート 'のような – test1321

+0

何かpleae私にいくつかの例を与えることができます::ます(」/{url?} '、' MenuController @ menu '); –

+0

私はこのように何かをする方法を知っていますが、とにかくそれを削除するにはどうにかしています。/ /家/? – test1321

関連する問題