Laravel-对所有路由都使用(:any?)通配符吗?
我在路由方面遇到了一些麻烦。
我正在使用CMS,需要两条主要路线。/admin
和/(:any)
。该admin
控制器用于路由/admin
和view
控制应该用于任何东西比其他/admin
。view
然后,从控制器中,我将解析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