代码之家  ›  专栏  ›  技术社区  ›  jlee

调用控制器中的控制器?

  •  3
  • jlee  · 技术社区  · 16 年前

    就最佳实践而言,是否建议这样做?我有一个需要在项目和配置文件控制器中调用的注释控制器+模型。注释控制器自动加载注释模型。

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

    我问是因为在科哈纳,视图不是单例类,所以如果我调用另一个控制器中的控制器,最终会得到两个视图。另一方面,如果我只是调用模型,那么在items和profiles控制器中会有重复的代码。

    所有的MVC专家都会帮忙的!=)

    4 回复  |  直到 13 年前
        1
  •  3
  •   timdev    16 年前

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

    我不知道你真正担心复制什么代码。

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

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

    第二种方式: -意识到你的观点没有理由不能直接与你的模型对话。 -编写一个视图助手,它直接从模型中获取所需的数据,并将其呈现出来。

    我更喜欢第二种方式。有些人无法让视图层与模型进行对话(以只读方式!)但我不是他们中的一员。

        2
  •  6
  •   Kathir Sid Vel    16 年前

    如果您使用Kohana3,您可以从HMVC特性中获益。您可以在控制器中执行控制器。

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

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

        3
  •  1
  •   Leprechaun    16 年前

    我认为这取决于你的控制器返回什么。

    如果您的控制器可以返回DTO/型号,那么当然,调用控制器是一个好主意。

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

    但是,如果您的控制器不能返回原始数据,那么它肯定是无产阶级的,因为您得到的是HTML(或其他标记)。这意味着您必须将该HTML直接传输到所需的视图中,或者从中提取数据。这两个都是坏主意。

    通过管道传输原始HTML意味着,如果更改注释视图,则配置文件模块上注释的显示将不可避免地发生更改。这也许是你想要的,但我会选择灵活性。

    现在,如果需要数据,则必须从视图返回的标记中提取数据,这是很重的,而且会产生反效果。

        4
  •  0
  •   eipark Glen Yates    13 年前

    如果您试图调用一个静态方法,您可以直接调用函数。例如:

    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)
        }
    }
    
    推荐文章