我尝试过以下方式
Route::set('sections', '<directory>(/<controller>(/<action>(/<id>)))',
array(
'directory' => '(admin|affiliate)'
))
->defaults(array(
'controller' => 'home',
'action' => 'index',
));
而不是Campaign文件夹中的Home控件,我需要默认从Campaign / City文件夹加载Home Controller。我在bootstrap.php
中使用了上述代码,但它提供了'URL not found on this server'
错误
答案 0 :(得分:0)
作为第三个参数传递给Route::set()
的数组限制了可以传递给路由的值。在您的代码array('directory' => '(admin|affiliate)')
中,将目录参数限制为“admin”或“affiliate”为了让它更深入,您需要修改路径。
Kohana Routing Guide有一堆示例使用过滤器以您可能想象的任何方式进行路由,但您可以路由到子目录而无需转向过滤器。
例如,使用以下目录结构:
classes/Controller/
Admin/
Cupertino/
Home.php (Controller_Admin_Cupertino_Home)
Home.php (Controller_Admin_Home)
Affiliate/
Cupertino/
Home.php (Controller_Affiliate_Cupertino_Home)
Home.php (Controller_Affiliate_Home)
以下路线:
Route::set('sections', '<directory>(/<controller>(/<action>(/<id>)))',
array(
'directory' => '(admin/cupertino|admin|affiliate/cupertino|affiliate)'
))
->defaults(array(
'controller' => 'home',
'action' => 'index',
));
网址index.php/admin
,index.php/admin/cupertino
,index.php/affiliate
和index.php/affiliate/cupertino
将通过各自的控制器进行路由。
子目录需要在父母之前列出,否则Kohana将始终与父母匹配。例如即使是网址Controller_Admin_Home
,以下内容也始终路由到index.php/admin/cupertino
:
`array('directory' => 'admin|admin/cupertino')`.
使用过滤器可能如下所示:
Route::set('admin_subsections', 'admin/<directory>(/<controller>(/<action>(/<id>)))',
array(
'directory' => '(cupertino|sanjose|santacruz)'
))
->filter(function($route, $params, $request)
{
// append "admin/" to the directory param
$params['directory'] = 'admin/' . $params['directory'];
return $params; // Returning an array will replace the parameters
})
->defaults(array(
'controller' => 'home',
'action' => 'index',
));
Route::set('sections', '<directory>(/<controller>(/<action>(/<id>)))',
array(
'directory' => '(admin)'
))
->defaults(array(
'controller' => 'home',
'action' => 'index',
));
再次,订单很重要。