我试过以下方法
Route::set('sections', '<directory>(/<controller>(/<action>(/<id>)))',
array(
'directory' => '(admin|affiliate)'
))
->defaults(array(
'controller' => 'home',
'action' => 'index',
));
代替Home controller in Campaign文件夹我需要从Campaign/City文件夹加载Home controller默认情况下我在bootstrap.php
中使用了上述代码,但它给'URL not found on this server'
错误
传递给Route::set()
的第三个参数数组限制了路由可以传递的值。在您的代码中,array('directory' => '(admin|affiliate)')
将目录参数限制为'admin'或'affiliate',要使其更深入,您需要修改路由。
Kohana路由指南有很多使用过滤器的例子,你可以用任何你能想到的方式进行路由,但是你可以不使用过滤器就路由到子目录。
例如,目录结构如下:
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',
));
url index.php/admin
, index.php/admin/cupertino
, index.php/affiliate
和index.php/affiliate/cupertino
将通过各自的控制器路由。
子目录需要在父目录之前列出,否则Kohana将始终匹配父目录。例如,以下将始终路由到Controller_Admin_Home
,即使URL 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',
));
再说一遍,顺序很重要