Kohana 3.2:将控件路由到默认的另一个路径

时间:2014-05-08 09:51:08

标签: php kohana-3.2

我尝试过以下方式

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'错误

1 个答案:

答案 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/adminindex.php/admin/cupertinoindex.php/affiliateindex.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',
    ));

再次,订单很重要。