【问题标题】:Kohana 3.2 controllers in classes/controllers/<subfolder>/<subfolder>类/控制器/<子文件夹>/<子文件夹>中的 Kohana 3.2 控制器
【发布时间】:2015-09-14 19:13:16
【问题描述】:

我已经看到了许多与这个问题非常相似的问题(例如this onethis),但我的问题是我的控制器位于 controllers 文件夹。我的目录结构如下:

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

        guest/
            ........

    models/
        ........

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

【问题讨论】:

    标签: php routing kohana-3 kohana-3.2


    【解决方案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,
            );
        }
    });
    

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

    【讨论】:

    • 我必须将控制器名称更改为“Controller_Guest_MemberProfileInfo”吗?因为我正在尝试您的第一个解决方案,但它仍然无法正常工作
    • @boi_echos 在管理示例中,控制器需要命名为Controller_Admin_ManageMembersProfile_MemberList - 每个子目录都需要添加_
    • 哇,它现在工作了。谢谢。我在控制器中调用操作时遇到问题,我发现您必须在路由中添加“(/)”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多