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 框架以及每个框架提供的功能。

骨架 描述

笨



https://codeigniter.com/

它是最流行的 PHP MVC 框架之一。它轻量级且学习曲线短。它拥有一套丰富的库,可帮助快速构建网站和应用程序。对 OOP 编程知识有限的用户也可以使用它。CodeIgniter 支持的应用程序包括:


小花


小花


http://kohanaframework.org

它是一个分层模型视图控制器 HMVC 安全且轻量级的框架。它具有一组丰富的组件,可用于快速开发应用程序。使用 Kohana 的公司包括:


CakePHP的


CakePHP的


www.cakephp.org

它以 Ruby on Rails 为模型。它以软件设计模式、约定优于配置、ActiveRecord 等概念而闻名。 CakePHP的 供电应用包括;


Zend公司

www.framework.zend.com


Zend公司

它是一个强大的框架;

  • 安全、可靠、快速、可扩展
  • 支持 Web 2.0 和 Web 服务的创建。

它具有来自以下供应商的 API: Amazon, 谷歌, Flickr、雅虎等。它是开发商业应用程序的理想选择。Zend 支持的应用程序包括:

  • Pimcore CMS,
  • 点内核。

使用 Zend 框架的公司包括;

  • 英国广播公司
  • Cisco
  • 网迅
  • Offers.com

将民意调查应用程序移植到 CodeIgniter

教程上,我们创建了一个 PHP 投票应用程序。在这里,我们将该代码移植到 CodeIgniter

  • 下载 最新版本的 CodeIgniter 网站。
  • 将压缩文件的内容解压到 Web 服务器目录中的开发目录中。在本课中,我们将使用 ciopinionpoll 作为文件夹名称。
  • 浏览到 URL http://localhost/ciopinionpoll/

将民意调查应用程序移植到 CodeIgniter

现在我们要将我们的民意调查应用程序移植到 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/

PHP MVC 框架测试

点击确定按钮,您将看到以下警告消息

PHP MVC 框架测试

为您喜欢的候选人投票,然后点击“确定”,您将看到以下结果页面

PHP MVC 框架测试

结语

CodeIgniter 是一个易于学习和使用的 PHP MVC 框架,可以大大减少开发应用程序所花费的时间。
CodeIgniter 是一个易于学习和使用的 PHP MVC 框架,可以大大减少开发应用程序所花费的时间。

总结

  • 框架是一组提供常见任务部分实现的库。
  • PHP 拥有许多开源的、成熟的、经过测试的 MVC 框架。
  • 良好的开发方法将数据与表示分开,并鼓励使用单一入口点进入应用程序。
  • 遵循应用程序设计最佳实践的传统 PHP 应用程序只需进行最少的修改即可移植到 MVC 框架。