【问题标题】:MVC quandaries, should this go in view or controller?MVC 困惑,这应该进入视图还是控制器?
【发布时间】:2012-08-17 16:47:16
【问题描述】:

我是 MVC 的新手,想知道在何处放置特定代码的最佳做法是什么,无论是控制器还是视图(或者甚至是模型,如果我不知道的话)。

当前应用程序从数据库中检索信息,一列是“类型”。然后根据类型,有一个switch语句,准备好要在视图中显示的html标签。

类似:

    foreach ($data as &$dataPoint)
    {
        foreach ($dataPoint as &$postItem)
        {
            switch ($postItem['type'])
            {
                case "image":
                    $postItem['content'] = "<img src=\.$postItem['content']."\" />";
                    break;
                case "youtube":
                    $postItem['content'] = "<iframe src=\"http://www.youtube.com/embed/".$postItem['content']."?showinfo=0\" frameborder=\"0\"></iframe>";
                    break;
            }
        }
    }

但我只是不知道它应该去哪里,它应该直接在控制器中,然后再传递给视图吗?还是应该放在视图文件的顶部?

任何对 MVC 理论和设计的见解也将不胜感激:)

【问题讨论】:

    标签: model-view-controller codeigniter


    【解决方案1】:

    如果是显示逻辑,它应该在视图中。由于这似乎是显示逻辑,因此视图似乎是最好的地方。

    这个答案的解释有点不同:https://stackoverflow.com/a/2574953/1324019

    【讨论】:

    • 那么如果是这样的话——这是否意味着视图页面会是这样的: ...
    • @bswinnerton 类似的东西。这个页面有一些很好的例子来说明如何在 codeigniter 中使用视图:codeigniter.com/user_guide/general/views.html
    • 是的,我看过那个页面,但没有一个例子包含视图内部的逻辑,这就是我问的原因。
    • @bswinnerton 最后一个例子包括一个 foreach 循环——基本上和你正在做的一样。如果这个函数只对这个特定的视图是必需的,是的,我会在视图的顶部声明它,然后在 php 标记中调用它,如链接所示。
    • 最后一个问题,我发誓:)。如果它不只是在那个视图中,你会把它放在哪里?
    【解决方案2】:

    在你看来是的,就像其他人提到的那样。

    你确实可以创建一个视图格式帮助文件来处理一些非通用的 php 函数

    foreach ($data as &$dataPoint)
        {
            foreach ($dataPoint as &$postItem)
            {
                //format_helper.php
                get_content_type($postItem);
            }
        }
    

    format_helper.php

    if(!function_exists('get_content_type'){
        function get_content_type(array $postItem){
             switch ($postItem['type'])
                {
                    case "image":
                        echo "<img src=\.$postItem['content']."\" />";
                        break;
                    case "youtube":
                        echo "<iframe src=\"http://www.youtube.com/embed/".$postItem['content']."?showinfo=0\" frameborder=\"0\"></iframe>";
                        break;
                }
        }
    })
    

    【讨论】:

    • 只是为了确认一下,第一个代码是在视图中还是在控制器中被截断?
    • 在视图中是的,$data 是通过控制器提供的
    猜你喜欢
    • 2012-06-01
    • 1970-01-01
    • 2012-06-12
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多