classes/controllers/<subfolder>/<subfolder> 中的 Kohana 3.2 控制器

Kohana 3.2 controllers in classes/controllers/<subfolder>/<subfolder>

我已经看到很多与此问题非常相似的问题(例如 this one and this),但我的问题是我的控制器位于 controllers[ 的文件夹内的子文件夹中=21=]文件夹。我的目录结构如下所示:

classes/
    controllers/
        admin/
            manageMemberProfile/
                memberList.php
                memberProfileInfo.php
                editMemberProfile.php
            manageCompanyProfile/
                ........
        member/
            ........

        guest/
            ........

    models/
        ........

请注意,我已经在我提供的 link 中完成了解决方案(并设法使其工作),但它仅适用于 controllers 中的文件夹中的控制器 文件夹。我想要的是用这种目录设置来调用我的控制器。我对 kohana 3.2 中的路由很陌生,所以我真的不知道如何解决这个问题,我也阅读了他们关于路由的文档,但我仍然无法解决我的这个问题。

链接中所述的答案也适用于此处。您只需要添加子目录,例如像这样

Route::set('admin_manageMembersProfile', 'admin/manageMembersProfile(/<controller>)')
    ->defaults(array(
        'directory' => 'admin/manageMembersProfile',
        'controller' => 'defaultController',
        'action' => 'defaultAction',
    ));

当然,对每个子目录都这样做会很有压力。所以你可以使用 Lambda/Callback route logic:

Route::set('admin', function($uri) {
    $directories = array('manageMembersProfile', 'manageOthers');
    if (preg_match('#^admin/('.implode('|', $directories).')(/[^/]+)*#i', $uri, $match)) {
        $subdirectory = $match[1];
        if (array_key_exists(2, $match)) {
            $controller = trim($match[2], '/');
        } else {
            $controller = 'defaultController';
        }
        if (array_key_exists(3, $match)) {
            $action = trim($match[3], '/');
        } else {
            $action = 'defaultAction';
        }
        return array(
            'directory' => 'admin/'.$subdirectory,
            'controller' => $controller,
            'action' => $action,
        );
    }
});

这只是一个非常基本的示例,但我希望它能向您展示如何以这种方式处理路由。