Php 试图理解MVC。我的网站的实现距离有多近?
对于web编程来说还是很新的,我本身并没有具体的问题,但我想知道这种设计与MVC在这些条件下的实现有多接近Php 试图理解MVC。我的网站的实现距离有多近?,php,model-view-controller,design-patterns,Php,Model View Controller,Design Patterns,对于web编程来说还是很新的,我本身并没有具体的问题,但我想知道这种设计与MVC在这些条件下的实现有多接近db.php只连接到数据库 我不想回答“使用CodeIgniter、CakePHP、Zend Framework等”,因为我很可能最终会这样做,但现在我想了解如何在一个典型的网站中使用开箱即用的PHP和HTML实现一个基本的MVC模式。另外,我已经阅读了Model view controller的wikipedia页面,我仍然不知道如何在这种情况下应用它 我真的不喜欢我现在使用的解决方案,因
db.php
只连接到数据库
我不想回答“使用CodeIgniter、CakePHP、Zend Framework等”,因为我很可能最终会这样做,但现在我想了解如何在一个典型的网站中使用开箱即用的PHP和HTML实现一个基本的MVC模式。另外,我已经阅读了Model view controller的wikipedia页面,我仍然不知道如何在这种情况下应用它
我真的不喜欢我现在使用的解决方案,因为它看起来仍然很杂乱无章。我不确定我到底是什么意思,但它似乎有点异味。随着大量的变量,它仍然显得相当混乱和不雅。网站的许多部分似乎都在为访问其他部分而苦苦挣扎,而且整体设计有点糟糕。我不断地将大量变量传递给构造函数,而整个解决方案似乎非常不灵活。我不知道;我仍然有点困惑,在这个上下文中控制器是什么,或者我是否有控制器。希望有人能缓解这一切困惑
index.php
<?php
require('db.php');
require('header_model.php');
require('submissions_model.php');
require('template.php');
$headerModel = new HeaderModel();
$page = $headerModel->getPage();
$sort = $headerModel->getSort();
$search = $headerModel->getSearch();
$submissionsModel = new SubmissionsModel($sort, $page, $resultsPerPage, $search);
$submissions = $submissionsModel->getSubmissions();
$outcomeCount = $submissionsModel->getOutcomeCount();
$index_view = new Template('index_view.php', array(
'header' => new Template('header.php'),
'menu' => new Template('menu.php', array('sort' => $sort)),
'submissions' => new Template('submissions.php', array('submissions' => $submissions)),
'pagination' => new Template('pagination.php', array('page' => $page, 'resultsPerPage' => $resultsPerPage, 'outcomeCount' => $outcomeCount, 'sort' => $sort)),
'footer' => new Template('footer.php')
));
$index_view->render();
?>
submissions\u model.php代码段
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>My Website</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link href="styles.css" rel="stylesheet" type="text/css"/>
<link href="favicon.png" rel="shortcut icon" />
</head>
<body>
<?php
$this->header->render();
$this->menu->render();
$this->submissions->render();
$this->pagination->render();
$this->footer->render();
?>
</body>
</html>
public function getSearch() {
if (isset($_GET['search']))
return $_GET['search'];
else
return '';
}
class SubmissionsModel {
private $sort;
private $page;
private $resultsPerPage;
private $search;
public $submissions;
public $outcomeCount;
public function __construct($sort, $page, $resultsPerPage, $search) {
$this->sort = $sort;
$this->page = $page;
$this->resultsPerPage = $resultsPerPage;
$this->search = $search;
$this->initialize();
}
private function initialize() {
$submissionQuery = $this->getSubmissionQuery($this->search);
$this->outcomeCount = mysql_num_rows($submissionQuery);
$this->submissions = array();
while ($row = mysql_fetch_assoc($submissionQuery)) {
$voteblock = $this->getVoteblock($row);
$tags = $this->getTags($row);
$commentCount = mysql_num_rows(mysql_query("SELECT id FROM comments WHERE submissionID = $row[id]"));
$this->submissions[] = array('submission' => $row, 'upvote' => $voteblock['upvote'], 'votes' => $voteblock['votes'], 'downvote' => $voteblock['downvote'], 'tags' => $tags, 'commentCount' => $commentCount);
}
}
}
网络世界中的MVC工作原理如下:
这是一个超级基本的MVC设置,您可以在此基础上进行扩展。网络世界中的MVC工作原理如下:
这是一个超级基本的MVC设置,您可以在此基础上进行扩展。我最近也遇到了这个难题,经过一些尝试和错误后,得出了以下与ericacm的答案略有不同的设计模式实现:
getSomeVar()
或renderSomeData()
方法提供将数据处理到所需输出媒体(即html)的方法renderSomething()
方法加载到页面中我的想法是控制器应该控制一切
hth最近我自己也经历了这一困境,经过一些尝试和错误后,得出了以下设计模式实现,这与ericacm的答案略有不同: