当前位置: 首页 > 面试题库 >

Laravel-对所有路由都使用(:any?)通配符吗?

颜实
2023-03-14
问题内容

我在路由方面遇到了一些麻烦。

我正在使用CMS,需要两条主要路线。/admin/(:any)。该admin控制器用于路由/adminview控制应该用于任何东西比其他/adminview然后,从控制器中,我将解析URL并显示正确的内容。

这就是我所拥有的:

Route::get(array('admin', 'admin/dashboard'), array('as' => 'admin', 'uses' =>'admin.dashboard@index'));
Route::any('(:any)', 'view@index');

第一条路线有效,但第二条路线无效。我稍微玩了一下,看来如果我(:any)不带问号使用,只有在之后放一些东西,它才能起作用/。如果我 确实
把问号放在那儿,那根本不起作用。

我希望以下所有路线都转到view @ index:

/
/something
/something/something
/something/something/something
/something/something/something/something
...etc...

如果不对一堆(:any?)/(:any?)/(:any?)/(:any?)(我什至不知道有效的)进行硬编码,这是否可能?

最好的方法是什么?


问题答案:

编辑:自从Laravel 4发布以来,关于此主题一直存在一些困惑,此答案针对的是Laravel 3。

有几种方法可以解决此问题。

第一种方法是匹配(:any)/(:all?)

Route::any('(:any)/(:all?)', function($first, $rest=''){
    $page = $rest ? "{$first}/{$rest}" : $first;
    dd($page);
});

这不是最佳解决方案,因为它分为多个参数,并且由于某种原因(:all)本身无法运行(错误?)

第二种解决方案是使用正则表达式,我认为这是比上面更好的方法。

Route::any( '(.*)', function( $page ){
    dd($page);
});

还有另一种方法,即使这些路由返回了404,即使路由可能已经匹配了其他模式,它也可以让您检查是否有cms页。该方法修改了在routes.php以下方法中定义的事件侦听器:

Event::listen('404', function() {
    $page = URI::current();
    // custom logic, else
    return Response::error('404');
});

但是,我的首选方法是#2。我希望这有帮助。无论您做什么,都要确保在这些路由之上定义所有其他路由,以捕获所有路由,之后定义的任何路由都将永远不会触发。



 类似资料:
  • 问题内容: 如何在路线中指定通配符- 因此,以上内容适用于/ admin / users和/ admin / users / 1或/ admin / org / 3。因此,管理后可能会有一两个级别的路径。我该怎么做 ? 问题答案: 当前,AngularJS不支持路由中的正则表达式。 您可以按照以下方法解决 http://plnkr.co/edit/tBumW2oEqki2sEl1hjSc?p=pr

  • 问题内容: 我试图让一条路线涵盖包括自身在内的所有事物。我试过将所有东西都用哪一项工作, 除非 它不匹配。观察: 输出: 我有什么选择?我想出的最好的方法是路由哪个当然不是最佳选择,因为它匹配得太多了。 问题答案: 我认为您将必须有2条路线。如果查看连接路由器的第331行,则路径中的*将替换为。+,因此将匹配1个或多个字符。 https://github.com/senchalabs/connec

  • 作为一个 web 后台框架,路由无疑是极其重要的一部分。本博客接下来几篇文章都将会围绕路由这一主题来展开讨论,分别讲述: 路由的使用 路由属性注册 路由的正则编译与匹配 路由的中间件 路由的控制器与参数绑定 RESTful 路由 和之前一样,第一篇将会利用单元测试样例说明我们在平时可能用到的 route 的 api 函数用法,后面几篇文章将会剖析 laravel 的 route 源码。下面开始介绍

  • 上一篇文章我们说到路由的正则编译,正则编译的目的就是和请求的 url 来匹配,只有匹配上的路由才是我们真正想要的,此外也会通过正则匹配来获取路由的参数。 路由的匹配 路由进行正则编译后,就要与请求 request 来进行正则匹配,并且进行一些验证,例如 UriValidator、MethodValidator、SchemeValidator、HostValidator。 class RouteCo

  • 本文向大家介绍Laravel列出所有通过多种方法过滤的注册路由,包括了Laravel列出所有通过多种方法过滤的注册路由的使用技巧和注意事项,需要的朋友参考一下 示例 这将包括所有同时接受GET和POST方法的路由。

  • 问题内容: 我希望使用Python函数来帮助我进行计算,但是如果击中a时不立即求值,则该过程可能会花费更长的时间。我认为这可能是经过短路评估的,但我只是想确定一下。另外,有没有一种方法可以在Python中说明如何评估函数? 问题答案: 是的,它会短路: 从文档: 如果iterable的所有元素都为true(或者iterable为空),则返回True。相当于: 因此,当它为False时,该函数立即中