我试过了:
Route::set('default_controllers', '(<controller>(/<action>(/<id>)))')
->defaults(array(
'controller' => 'welcome',
'action' => 'index',
));
Route::set('default', '<uri>')
->defaults(array(
'controller' => 'cms',
'directory' => 'cms',
'action' => 'render',
));
但实际上我希望'default'(使用render动作)优先于default_controllers。
我希望它首先检查任何控制器,如果没有,那么它应该运行第二个默认值,渲染。渲染检查数据库中的uri并返回页面(如果存在),否则会引发错误。
如果我打开两个路线位置,那么“默认”路线在“default_controllers”之前,那么它可以与cms页面一起使用,但不能与控制器一起使用(因为它不会在渲染后查找其他路径)函数抛出了页面不存在的错误。)
我在这做什么?我怎样才能使它们都起作用?
答案 0 :(得分:1)
这里你基本上有两条catchall路线。您应该删除其中一个,并使您的路线更具体。 (<controller>(/<action>(/<id>)))
路线实际上非常糟糕,仅作为示例提供。
答案 1 :(得分:0)
要使其正常工作,您必须明确告知路由要加载哪些控制器。
Route::set('default_controllers', '(<controller>(/<action>(/<id>)))', array(
'controller' => 'controller|anotherController|etcController'
))
->defaults(array(
'controller' => 'welcome',
'action' => 'index',
));
如果您愿意,可以编写一个类来查找控制器并缓存结果,以免增加加载时间。然后,您将此值传递给数组中控制器键的值。
您的其他路线可以保持原样:
Route::set('default', '<uri>')
->defaults(array(
'controller' => 'cms',
'directory' => 'cms',
'action' => 'render',
));