PHP MVC 框架教程:CodeIgniter 示例
什么是 PHP MVC 框架?
PHP MVC 是一种应用程序设计模式,它将应用程序数据和业务逻辑(模型)与表示(视图)分开。MVC 代表模型、视图和控制器。
控制器充当模型和视图之间的中介。
将 MVC 设计模式视为汽车和驾驶员。
汽车有挡风玻璃(视野),驾驶员(控制员)使用它来监视前方的交通状况,然后根据前方看到的情况加速或刹车(模型)。
为什么要使用 PHP MVC 框架?
- PHP MVC 框架通过以下方式简化了复杂技术的使用;
- 隐藏所有复杂的实施细节
- 提供我们可以用来构建应用程序的标准方法。
- 提高了开发人员的工作效率,这是因为连接数据库、清理用户输入等活动的基础实现已经部分实现。
- 遵守专业编码标准
PHP MVC 设计模式
现在让我们简单讨论一下 MVC 设计模式的每个组件。
型号 – 此部分与业务逻辑和应用程序数据有关。它可用于执行数据验证、处理数据并存储数据。数据可以来自;
- 平面文件
- 数据库
- XML 文档
- 其他有效数据源。
控制器 – 这部分处理用户对服务器的资源请求。
例如,当用户请求 URL …/index.php?products=list,控制器将加载产品模型来检索产品数据,然后在列表视图中输出结果。
简而言之,控制器根据请求的资源将模型和视图链接在一起。
观看数 – 此部分用于向用户呈现数据。通常以 HTML 页面的形式呈现。
PHP MVC 框架的类型
选择最佳的 PHP 框架是一项挑战。
您无需编写自己的框架即可享受 MVC 的优势。
您应该只尝试创建自己的 MVC 相关应用程序设计,以了解 MVC 框架的工作原理。
一旦您熟悉了 MVC 框架的工作方式,您就应该转向成熟且已经过测试的框架。
下表简要介绍了一些流行的 php 框架以及每个框架提供的功能。
骨架 | 描述 |
---|---|
|
它是最流行的 PHP MVC 框架之一。它轻量级且学习曲线短。它拥有一套丰富的库,可帮助快速构建网站和应用程序。对 OOP 编程知识有限的用户也可以使用它。CodeIgniter 支持的应用程序包括: |
|
它是一个分层模型视图控制器 HMVC 安全且轻量级的框架。它具有一组丰富的组件,可用于快速开发应用程序。使用 Kohana 的公司包括: |
|
它以 Ruby on Rails 为模型。它以软件设计模式、约定优于配置、ActiveRecord 等概念而闻名。 CakePHP的 供电应用包括; |
|
它是一个强大的框架;
它具有来自以下供应商的 API: Amazon, 谷歌, Flickr、雅虎等。它是开发商业应用程序的理想选择。Zend 支持的应用程序包括:
使用 Zend 框架的公司包括;
|
将民意调查应用程序移植到 CodeIgniter
该 教程上,我们创建了一个 PHP 投票应用程序。在这里,我们将该代码移植到 CodeIgniter
- 下载 最新版本的 CodeIgniter 网站。
- 将压缩文件的内容解压到 Web 服务器目录中的开发目录中。在本课中,我们将使用 ciopinionpoll 作为文件夹名称。
- 浏览到 URL http://localhost/ciopinionpoll/
现在我们要将我们的民意调查应用程序移植到 CodeIgniter。回想一下,我们的应用程序分为三个主要组件,即:
- 前端控制器 – 这是响应 URL 请求并返回所请求页面的部分。此代码将进入控制器
- 模型 – 这是响应请求的数据并返回请求的数据的代码。此代码将进入模型
-
视图 – 这是负责格式化和显示数据的代码。此代码将进入视图
- 浏览到 ciopinionpoll 文件夹
- 打开 数据库.php 文件位于 application/config 目录中。
- 找到以下代码行
数据库配置设置
- 将用户名设置为root
- 将密码设置为本地主机的 root 密码
- 数据库名称为 opinion_poll。请注意,我们将使用上一课中创建的数据库。
- 保存更改并关闭文件。
创建我们的模型
接下来,我们将创建扩展 CI_Model 的模型。CI_Model 是 CodeIgniter 库的一部分。该模型位于 application/models 中 意见调查模型.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); } } ?>
这里,
- “class Opinion_poll_model extends CI_Model…” 是扩展 CI_Model 的模型
- “…parent:: __construct();” 调用 CI_Model 构造函数
- “$this->load->database();” 加载数据库库,以便我们的应用程序可以与数据库交互
- “$this->db->” 是 CodeIgniter 的活动记录。检查一下 链接 有关活动记录的更多信息。
创建我们的控制器 现在让我们创建控制器。我们将使用位于 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 */ ?>
这里,
- “if (!defined('BASEPATH')) exit('No direct script access allowed');” 确保用户不直接访问控制器类
- “class Welcome extends CI_Controller…” 我们的控制器扩展了 CI_Controller 类
- “public function __construct()” 调用 CI_Controller 的类构造函数方法并加载我们的 Opinion_poll_model 模型
- “public function index()…” 是映射到 index.php 的函数。它使用 CodeIgniter 的输入类来检查是否已提交投票,将其添加到数据库,然后显示结果。如果输入类的帖子数组为空,它会加载投票页面。
- “$this->input->post('…')” 是 CodeIgniter 输入类,用于获取 $_POST 全局变量的内容。
- “$this->opinion_poll_model->add_vote($this->input->post('vote'))”调用模型的 add_vote 方法将投票添加到数据库中。
创建我们的视图
回想一下前面的示例,我们有两个 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 框架,可以大大减少开发应用程序所花费的时间。
CodeIgniter 是一个易于学习和使用的 PHP MVC 框架,可以大大减少开发应用程序所花费的时间。
总结
- 框架是一组提供常见任务部分实现的库。
- PHP 拥有许多开源的、成熟的、经过测试的 MVC 框架。
- 良好的开发方法将数据与表示分开,并鼓励使用单一入口点进入应用程序。
- 遵循应用程序设计最佳实践的传统 PHP 应用程序只需进行最少的修改即可移植到 MVC 框架。