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

框架 描述

CodeIgniter


CodeIgniter


https://codeigniter.com/

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


Kohana


Kohana


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服务的创建。

它提供了来自Amazon、Google、Flickr、Yahoo等供应商的API。它是开发业务应用程序的理想选择。Zend支持的应用程序包括:

  • Pimcore CMS,
  • DotKernel。

使用Zend框架的公司包括:

  • BBC
  • Cisco
  • Webex
  • Offers.com

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

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

  • 从其网站下载最新版本的CodeIgniter。
  • 将zip文件的内容提取到您Web服务器目录中的开发目录中。在本课中,我们将使用ciopinionpoll作为文件夹名称。
  • 浏览到URL https:///ciopinionpoll/

Porting the opinion poll application to CodeIgniter

我们现在将把意见调查应用程序移植到CodeIgniter。回想一下,我们的应用程序分为三个主要组件,即:

  • 前端控制器 – 这是响应URL请求并返回请求页面的部分。此代码将放入控制器
  • 模型 – 这是响应数据请求并返回请求数据的代码。此代码将放入模型
  • 视图 – 这是负责格式化和显示数据的代码。此代码将放入视图

    • 浏览到ciopinionpoll文件夹
    • 打开位于application/config目录中的database.php文件。
    • 找到以下代码行

数据库配置设置

Database configuration settings

  • 将用户名设置为root
  • 将密码设置为您的localhost root密码
  • 数据库名称设置为opinion_poll。请注意,我们将使用上一课中创建的数据库。
  • 保存更改并关闭文件。

创建我们的模型

接下来,我们将创建扩展CI_Model的模型。CI_Model是CodeIgniter库的一部分。模型将位于application/models 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); 
        } 
   } 
?>

此处,

  • “class Opinion_poll_model extends CI_Model…” 是我们扩展CI_Model的模型
  • “…parent:: __construct();” 调用CI_Model构造函数
  • “$this->load->database();” 加载数据库库,以便我们的应用程序可以与数据库进行交互
  • “$this->db->” 是CodeIgniter的Active Record。有关Active Record的更多信息,请查看此链接

创建我们的控制器 现在我们来创建控制器。我们将使用位于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的input类来检查是否提交了投票,将其添加到数据库,然后显示结果。如果input类的post数组为空,它会加载投票页面。
  • “$this->input->post(‘…’)” 是CodeIgniter的input类,用于获取$_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,请浏览到https:///ciopionpoll/

PHP MVC framework Testing

单击OK按钮,您将看到以下警报消息

PHP MVC framework Testing

为你最喜欢的候选人投票,然后点击OK。你将看到以下结果页面

PHP MVC framework Testing

结论

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

摘要

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