繁体   English   中英

在控制器内调用控制器?

[英]Calling a controller within a controller?

至于最佳实践,这是推荐的吗? 我有一个注释控制器+模型需要在项目和配置文件控制器中调用。 注释控制器自动加载注释模型。

是否可以直接从项目和配置文件控制器调用注释控制器,或者是调用注释模型的“最佳实践”方式?

我问,因为在kohana中,视图不是单例类,所以如果我在另一个控制器中调用控制器,我最终得到两个视图。 另一方面,如果我只是调用模型,则项目和配置文件控制器中将存在重复的代码。

所有MVC专家都会提供帮助! =)

如果您使用Kohana 3,您可以享受HMVC功能。 您可以在控制器中执行控制器。

http://forum.kohanaphp.com/comments.php?DiscussionID=2768

查看上面的链接以获取一些示例

一般来说,我会采用“胖模型”方法。

我不确定你真正担心重复的代码是什么。

有几种方法可以做到这一点:

第一种方式: - 询问您的评论模型以返回一些评论。 - 将评论数据传递到您的视图中。 - 在视图中渲染注释,可能使用一些视图助手

第二种方式: - 意识到您的观点无法直接与您的模型对话。 - 编写一个视图助手,直接从模型中获取所需的数据并进行渲染。

我更喜欢第二种方式。 有些人在让他们的视图层与模型对话时会出现问题(以只读方式!),但我不是其中之一。

我会说这取决于你的控制器返回的内容。

如果您的控制器可以返回DTO /模型,那么确定,调用控制器是个好主意。

您的控制器定义了一个严格的,有文档记录的,并且有希望稳定的功能入口点。 因此,只要不更改Controller方法的签名,就可以完全忽略Comments的实现,或者随意更改它。

但是,如果您的Controller无法返回原始数据,那么它肯定是有效的,因为您获得了html(或其他标记)作为回报。 这意味着您必须将html直接传送到所需的视图中,或从中提取数据。 这两个都是个坏主意。

管道原始html意味着如果更改“注释”视图,“配置文件”模块上的注释显示将不可避免地发生变化。 这可能是你想要的,但我会追求灵活性。

现在,如果你想要数据,你将不得不从你的视图返回的标记中提取数据,这很重且反效果。

如果您尝试调用静态方法,则可以直接调用该函数。 例如:

class Controller_User extends Controller {
    public static function format_user($user){
        return array("data" => $user->getData());
    }
}

class Controller_Foo extends Controller {
    public function action_index(){
        $user = get_user_data_some_how();
        $user_data = Controller_User::format_user($user)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM