【问题标题】:Laravel "root" route variableLaravel“根”路由变量
【发布时间】:2019-03-03 12:59:43
【问题描述】:

我在 Laravel 中有以下路线。我希望能够调用这两个国家以及域“根”上的页面,而不是使用任何目录前缀。

我想要实现的是,当在 eloquent 模型中找不到页面时,它会尝试打开国家/地区,如果失败也显示 404。

这可能吗?我需要改变什么?

Route::get('/{page}', 'PageController@view')->name('pages.view');
Route::get('/{country}', 'CountryController@view')->name('countries.view');

编辑:我想我有点不清楚。 问题是,永远无法到达countries.view 路由,因为它之前使用pages.view 失败。假设我调用/germany - 它首先匹配pages.view 路由,但不存在页面germany。它会立即抛出 404,但我希望它在那之后检查国家,并且只有在 /germany 不作为国家存在时才会失败。

【问题讨论】:

  • 我认为您当前定义的路线非常模糊。 Laravel 无法区分 /{page} 和 /{country} 请求。我认为可行的是控制器中的一种方法,您可以在其中解析传递的参数,决定如何处理它,然后重定向到适当的视图

标签: php laravel


【解决方案1】:

不可知论如何? 一条路线,您测试参数,然后返回正确的结果。

Route::get('/{pageOrCountry}',function($pageOrCountry){
$page = App\Page::find($pageOrCountry);
if($page) return $page;
else $country = App\Country::find($pageOrCountry);
if($country) return $country;
else return redirect('404');
});

【讨论】:

    【解决方案2】:

    有几种方式我会提到两种方式:

    1- 路由模型绑定: 内页控制器创建函数

      public function view(Page $page){
       }
    

    如果页面不存在,此函数将返回 not found

    2- 正常检查:

       public function view($page){
        $check= Page::find($page);
         if(!$check) abort(404);
       }
    

    【讨论】:

    • 对不起,我想我有点不清楚我想要什么。问题是,永远无法到达“countries.view”路线,因为它之前因“pages.view”而失败。假设我调用 /germany - 它首先匹配“pages.view”路由,但不存在页面“germany”。它立即抛出 404,但我希望它在那之后检查国家,并且只有在 /germany 不作为国家存在时才会失败。
    【解决方案3】:

    创建resources/views/errors/404.blade.php文件夹并定义404错误信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 2015-03-05
      • 2015-03-16
      • 2015-02-20
      • 2022-01-04
      • 2014-02-11
      • 2016-05-29
      相关资源
      最近更新 更多