所以今天一位朋友正在帮助我完成我正在制作的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>");
}
有人可能会解释他们的意思吗?如果有的话,你能提供一些资源。
答案 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框架可供您学习,例如CakePHP,CodeIgniter
这个想法是把事情分开。准备数据的逻辑不会干扰数据如何显示为html。你可以修改其中任何一个而不会相互影响 - 当你修改一个东西时,你需要更少关心其他东西。
答案 3 :(得分:-2)