重定向次数过多laravel

重定向次数过多laravel,laravel,laravel-5,Laravel,Laravel 5,我尝试在控制器中使用重定向->操作It错误过多重定向 try { //If check urL category null if (is_null($category)){ Log::error("[Front] MenuController@menu : notfound public category "); //error redirect return redirect()->action('Front\HomeSlideviewCo

我尝试在控制器中使用重定向->操作It错误过多重定向

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

      //error redirect
       return redirect()->action('Front\HomeSlideviewController@index', $url);
  }
} catch (\Exception $e) {
    return 'error';
}   
这是我的web.php

  Route::get('/{url?}', 'MenuController@menu');
  Route::get('/{name?}', 'HomeSlideviewController@index')->name('promotiondetail');

如果Url为空,我会尝试使用重定向操作,如果您有路由冲突,它每次都会调用第一个路由。
尝试更改您的路线。

您有路线冲突,它每次都会呼叫第一条路线。
尝试更改路线。

两条路线相同,只有第一条路线匹配

请注意,当重定向到操作时,Laravel会将您的操作解析为路由,因此这与重定向到路由名称(更防弹)相同。顺便说一下,第二个参数应该是数组

return redirect()->action('Front\HomeSlideviewController@index', $url);
要执行您想要的操作,您需要一个
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');
}

两条路线完全相同,只有第一条路线匹配

请注意,当重定向到操作时,Laravel会将您的操作解析为路由,因此这与重定向到路由名称(更防弹)相同。顺便说一下,第二个参数应该是数组

return redirect()->action('Front\HomeSlideviewController@index', $url);
要执行您想要的操作,您需要一个
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');
}

如果空的路由1捕获重定向到路由2,他们的方法是什么?因此它将与类似
redirect()->route('promotiondetail',$url)一样对吗?你不需要创建两个路由和重定向,只需要一个并返回不同的响应,请检查我的更新答案:)你能再解释一下什么是ShowPage(),showsingleNews()这是函数吗?
公共函数ShowPage(Page$Page){返回视图('pages/static Page',['page'=>$page]);}
如果空的路由1捕获重定向到路由2,他们会怎么做?因此它将与
redirect()->route('promotiondetail',$url)相同
对吗?您不需要创建两个路由和重定向,只需要一个并返回不同的响应,请检查我的更新答案:)您能再解释一下什么是ShowPage(),showsingleNews()这是函数吗?
公共函数ShowPage(Page$Page){返回视图('pages/static Page',['page'=>$page]);}
你能给我举一些像
Route::get('/{url?}','MenuController@menu');路由::get('/home/{name?}','HomeSlideviewController@index')->name('promotiondetail')
我知道如何做这样的事情,谢谢,但还是要删除/home/?你能给我举一些像
Route::get('/{url?}',这样的例子吗MenuController@menu');路由::get('/home/{name?}','HomeSlideviewController@index')->name('promotiondetail')
嗯,我知道怎么做这样的事,谢谢,但还是要删除/home/?