Kohana 3 Route ::制作第二条默认路线?

时间:2012-03-05 12:51:33

标签: php kohana kohana-3

我试过了:

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页面一起使用,但不能与控制器一起使用(因为它不会在渲染后查找其他路径)函数抛出了页面不存在的错误。)

我在这做什么?我怎样才能使它们都起作用?

2 个答案:

答案 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',
));