【问题标题】:How can I check whether the route "URL" exists?如何检查路由“URL”是否存在?
【发布时间】:2016-07-08 02:37:16
【问题描述】:

Laravel 5.2 中,是否有特定的方式(处理程序)来检查路由是否存在?比方说,对于像这样的基本 URL:

http://www.example.com/laravel

然后我想从我的主页路由器处理不存在的 URL(例如:/laravel),即:

Route::get('/{page}', funtion(){
    //check if $page is a valid route URL? Or 404?
});

我如何有目的地检查这条路线是否有效?

【问题讨论】:

  • hopw 关于 Route::has('route.name');
  • 你的意思是Route::has('route.laravel')根据上面的示例路线吗?
  • 你的意思是:1)检查路由别名是否被使用过;或 2) 检查给定的 URL 是否与您的路线之一匹配?
  • @tbuteler >> 实际上,我想处理来自主页路由Route::get('/{page}') 的路由。如果没有路线,我想从主页处理一些事情。所以我想你刚才的问题是no (2)
  • 我想这就是你要找的。 stackoverflow.com/questions/18942646/…

标签: php laravel routes


【解决方案1】:

在 laravel 5.5.1+ 中添加任何捕获的最后一条路线不再适用

【讨论】:

    【解决方案2】:

    我使用以下路线作为我的最后一条路线:

    Route::any('{catchall}', function($page) {
        abort(404);
    } )->where('catchall', '(.*)');
    

    如果您还不知道,abort(404) 将从resources/views/errors 返回视图404.blade.php

    【讨论】:

      【解决方案3】:

      只需将您的Route::get('/{page}','MainController@getPage'); 放在最后即可。这样,如果它在使用它之前找到另一条路线,但如果没有,那么它将被此抓住。例如:

      Route::get('/welcome','WelcomeController@getWelcome');
      Route::get('/test','TestController@getTest');
      Route::get('/{page}','MainController@getPage');
      

      如果您要点击/welcome/test,它应该将它们路由到正确的控制器。如果你在哪里点击/hello,它应该去MainController并点击功能getPage($page)$page是你点击的页面。

      如果它点击MainController@getPage,你就知道它基本上是一个 404。

      如果您出于某种原因需要在到达路线之前知道,您可以创建如下内容:

      Route::get('/checkurl/{page}',function($page) {
          $exists = Route::has('/' . $page);
          return (new Response(json_encode(['exists'=>$exists]),200);
      });
      

      【讨论】:

        猜你喜欢
        • 2017-10-02
        • 1970-01-01
        • 2021-11-14
        • 2020-07-05
        • 2019-04-16
        • 1970-01-01
        • 1970-01-01
        • 2011-12-14
        • 2021-09-24
        相关资源
        最近更新 更多