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

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

我正在使用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。我希望这有帮助。无论您做什么,都要确保在这些路由之上定义所有其他路由,以捕获所有路由,之后定义的任何路由都将永远不会触发。

以上是 Laravel-对所有路由都使用(:any?)通配符吗? 的全部内容, 来源链接: utcz.com/qa/433701.html

回到顶部