类/控制器/ <子文件夹> / <子文件夹>中的Kohana 3.2控制器

时间:2015-06-28 06:23:00

标签: php routing kohana-3 kohana-3.2

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

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

        guest/
            ........

    models/
        ........

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

1 个答案:

答案 0 :(得分:1)

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

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,
        );
    }
});

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