“让您的控制器脱离您的视图,然后将您的模型从控制器中取出”

时间:2012-03-16 19:33:30

标签: php mysql

所以今天一位朋友正在帮助我完成我正在制作的PHP项目。他查看了我的代码并告诉我一些要修复的事情,等等。他说了一件我不太明白的事情。他说“让您的控制器脱离您的视线,然后将您的模型从控制器中取出”。例如,他在这里指出了这个代码,该代码在我的网站成员列表页面中:

$get_users = mysql_query("SELECT * FROM users") or die(mysql_error());

while($row = mysql_fetch_array($get_users)) {
    $username = ucfirst($row['username']);
    $user_group = getUserGroup($row['userlevel']);
    $dor = $row['dor'];

    print("<tr>
               <td class='border-bottom'>$username</td>
           <td class='border-bottom'>$user_group</td>
           <td class='border-bottom'>$dor</td>
          </tr>");
}

有人可能会解释他们的意思吗?如果有的话,你能提供一些资源。

4 个答案:

答案 0 :(得分:3)

他指的是所谓的MVC或模型视图控制器。

Controller类处理请求,Model处理计算和计算(通常是数据库连接和通信),然后它(Controller)使用模型中收集的信息加载View,并将其显示给用户。

他的意思是你应该将你的逻辑与你的显示器分开。


对于大型应用程序,MVC是一种很棒的设计模式。但是,如果您的应用程序没有很多页面和/或很小,那么您就不需要它了。

答案 1 :(得分:1)

我不同意“控制器之外的模型”。有人必须将请求映射到模型对象。请注意,您的朋友不是创建并行对象层次结构的狂热者之一,其唯一目的是保持层纯度。分层很好;教条不是。

答案 2 :(得分:1)

也许是这样的:

控制器文件:

$users_info = get_user_details();
show_users_info($users_info);

模型文件:

function get_user_details(){
    //... interacting with database
    return $details; // an associative array for username, usergroup, dor
}

查看文件:

function show_users_info($data){
    for($i=0; $i<count($data); $i++){
        //your <table>, <tr>, <td> html here
    }
}

您可以看到模型文件负责准备数据。 并且视图文件负责显示数据 - 您可以使用模板引擎(如Smarty或Dwoo)来帮助完成此操作。 并且,有许多PHP MVC框架可供您学习,例如CakePHPCodeIgniter

这个想法是把事情分开。准备数据的逻辑不会干扰数据如何显示为html。你可以修改其中任何一个而不会相互影响 - 当你修改一个东西时,你需要更少关心其他东西。

答案 3 :(得分:-2)