PHP MVC是一种应用程序设计模式,它将应用程序数据和业务逻辑(模型)与表示(视图)分开。 MVC代表模型,视图和控制器。
控制器在模型和视图之间进行中介。
将MVC设计模式视为汽车和驾驶员。
汽车具有挡风玻璃(视图),驾驶员(控制器)可使用该挡风玻璃监视前方的交通,然后根据前方的视线监视速度或制动(模型)。
现在,让我们简要讨论一下MVC设计模式的每个组成部分。
模型–这部分与业务逻辑和应用程序数据有关。它可用于执行数据验证,处理数据和存储数据。数据可以来自;
Controller 控制器-这是处理用户从服务器请求资源的部分。
例如,当用户请求URL…/ index.php?products = list时,控制器将加载产品模型以检索产品数据,然后在列表视图中输出结果。
简而言之,控制器根据请求的资源将模型和视图链接在一起。
Views 视图–这部分涉及向用户呈现数据。这通常是HTML页面的形式。
选择最佳的PHP框架是一个挑战。
您无需编写自己的框架即可从MVC的优势中受益。
您仅应尝试创建自己的与MVC相关的应用程序设计,以了解MVC框架如何工作。
一旦对MVC框架的工作方式感到满意,就应该继续使用成熟且已经过测试的框架。
下表简要描述了一些流行的php框架以及每个框架提供的功能。
Framework | 描述 |
---|---|
CodeIgniter https://codeigniter.com/ | 它是最流行的PHP MVC框架之一。 它重量轻,学习曲线短。 它具有丰富的库集,可帮助快速构建网站和应用程序。 对OOP编程了解有限的用户也可以使用它。 CodeIgniter支持的应用程序包括; https://www.pyrocms.com/http://www.shopigniter.com/ |
Kohana http://kohanaframework.org | 这是一个分层模型视图控制器HMVC安全,轻便的框架。 它具有用于快速开发应用程序的丰富组件集。 使用Kohana的公司包括; https://go.wepay.com/https://kids.nationalgeographic.com/https://www.sittercity.com/ |
CakePHP www.cakephp.org | 它是根据Ruby on Rails建模的。 CakePHP支持的应用程序包括; http://invoicemachine.com/http://www.fmylife.com/ |
www.framework.zend.com Zend | 它是一个功能强大的框架; 安全,可靠,快速和可扩展 支持Web 2.0和Web服务的创建。 它具有来自Amazon,Google,Flickr,Yahoo等供应商的API。它是开发业务应用程序的理想选择。 由Zend驱动的应用包括: Pimcore CMS, 点内核。 使用Zend框架的公司包括: BBC Cisco Webex Offers.com |
在本教程中,我们创建了一个PHP poll应用程序。 在这里,我们会将代码移植到CodeIgniter
现在,我们将把民意调查应用程序移植到CodeIgniter。 回想一下,我们的应用程序分为三个主要部分:
接下来,我们将创建将扩展CI_Model的模型。 CI_Model是CodeIgniter库的一部分。 该模型将位于应用程序/模型中Opinion_poll_model.php
<?php
class Opinion_poll_model extends CI_Model
{
public function __construct()
{
$this->load->database();
}
public function total_votes()
{
$query = $this->db->select('COUNT(choice) as choices_count')->get('js_libraries');
return $query->row()->choices_count;
}
public function get_results()
{
$libraries = array("", "JQuery", "MooTools", "YUI Library", "Glow");
$table_rows = '';
for ($i = 1; $i < 5; $i++)
{
$sql_stmt = "SELECT COUNT(choice) choices_count FROM js_libraries WHERE choice = $i;";
$result = $model->
select($sql_stmt); $table_rows .= "<tr><td>" . $ libraries [$i] . " Got:</td><td><b>" . $result[0] . "</b> votes</td></tr>";
}
public function add_vote($choice)
{
$ts = date("Y-m-d H:i:s"); $data = array('choice' => $choice, 'ts' => $ts); $this->db->insert('js_libraries', $data);
}
}
?>
这里,
创建我们的控制器现在创建控制器。 我们将使用位于application / controllers / welcome.php中的默认CodeIgniter控制器。 用以下代码替换其源代码。
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('opinion_poll_model');
}
public function index() {
if ($this->input->post('submitbutton') && !$this->input->post('vote')) {
echo "<script>alert('You did not vote!');</script>";
}
if ($this->input->post('vote')) {
$this->opinion_poll_model->add_vote($this->input->post('vote'));
$data['total_votes'] = $this->opinion_poll_model->total_votes();
$data['rows'] = $this->opinion_poll_model->get_results();
$this->load->view('results', $data);
} else {
$this->load->view('opinion_poll_form');
}
}
}
/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */
?>
这里,
回想一下前面的示例,我们有两个HTML页面,一个用于投票,另一个用于结果。我们将使用相同的HTML代码,并进行最少的修改来创建视图。在application / views目录中创建以下文件
opinion_poll_form.php
<html>
<head>
<title>
JavaScript Libraries - Opinion Poll
</title>
</head>
<body>
<h2>JavaScript Libraries - Opinion Poll</h2>
<p><b>What is your favorite JavaScript Library?</b></p>
<form method="POST" action="index.php">
<p>
<input type="radio" name="vote" value="1" /> JQuery
<br />
<input type="radio" name="vote" value="2" /> MooTools
<br />
<input type="radio" name="vote" value="3" /> YUI Library
<br />
<input type="radio" name="vote" value="4" /> Glow </p>
<p>
<input type="submit" name="submitbutton" value="OK" />
</p>
</form>
</body>
</html>
现在创建结果页面results.php
<html>
<head>
<title>JavaScript Libraries - Opinion Poll Results</title>
</head>
<body>
<h2>JavaScript Libraries - Opinion Poll Results</h2>
<p><b>What is your favorite JavaScript Library?</b></p>
<p><b><?php echo $total_votes; ?></b> people have thus far taken part in this poll:</p>
<p><table><tr><td>
<?php print($rows); ?>
</tr></td></table></p>
<p><a href="">Return to voting page</a></p>
</body>
</html>
测试我们的应用
假设您的应用程序的根目录是ciopinion,请浏览至http:// localhost / ciopionpoll /
单击确定按钮,您将看到以下警报消息
为您最喜欢的候选人投票,然后单击“确定”。您将看到以下结果页面
结论
CodeIgniter是一个易于学习和使用的PHP MVC框架,可以大大减少开发应用程序所花费的时间。