CodeIgniter 用户指南 基础教程 摘要

CI应用程序流程图:

  1. index.php 作为前端控制器,初始化运行 CodeIgniter 所需要的基本资源。
  2. Router 检查 HTTP 请求,以确定谁来处理请求。
  3. 如果缓存(Cache)文件存在,它将绕过通常的系统执行顺序,被直接发送给浏览器。
  4. 安全(Security)。应用程序控制器(Application Controller)装载之前,HTTP 请求和任何用户提交的数据将被过滤。
  5. 控制器(Controller)装载模型、核心库、辅助函数,以及任何处理特定请求所需的其它资源。
  6. 最终视图(View)渲染发送到 Web 浏览器中的内容。如果开启缓存(Caching),视图首先被缓存,所以将可用于以后的请求。

模型-视图-控制器:

  1. 模型 (Model) 代表你的数据结构。通常来说,你的模型类将包含取出、插入、更新你的数据库资料这些功能。
  2. 视图 (View) 是展示给用户的信息。一个视图通常是一个网页,但是在 CodeIgniter 中,一个视图也可以是一个页面片段,如页头、页尾。它还可以是一个 RSS 页面,或任何其它类型的“页面”。
  3. 控制器 (Controller) 是模型、视图以及其他任何处理 HTTP 请求所必须的资源之间的中介,并生成网页。

CI对URL采用分段解析,对于这样一个URL:http://example.com/news/latest/10,CI理解成这样:http://example.com/[控制器类名]/[控制器方法名]/[所需参数]

首先,新建一个新的控制器pages.php,放在application/controllers/目录下,这个类从CI_Controller类派生,定义了一个view方法,这个控制器将网站程序每次请求的中心,称为超级对象

class Pages extends CI_Controller
{

    function __construct()
    {
        parent::__construct();
    }

    function view($page = ‘home‘)
    {

    }
}

接下来,制作几个基础页面模版,分别是页头和页脚

header.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title><?php echo $title ?> - CodeIgniter 2 Tutorial</title>
</head>
<body>
    <h1>CodeIgniter 2 Tutorial</h1>

footer.php

    <strong>&copy;2011</strong>
</body>
</html>

对应与pages控制器,在view/pages/目录下新增两个视图文件:home.php、about.php,内容可以简单的输出文件名,下面就可以在控制器中加载视图了

function view($page = ‘home‘)
{
    // 检查视图文件是否存在
    if (!file_exists(APPPATH . "/views/pages/" . $page . ".php"))
    {
        show_404();
    }

    $data[‘title‘] = ucfirst($page);

    $this->load->view(‘templates/header‘, $data);
    $this->load->view(‘pages/‘ . $page, $data);
    $this->load->view(‘templates/footer‘, $data);
}

通过http://localhost:8080/studyci/1/index.php/pages/view/home就可以看到效果了,这个URL中index.php是入口文件,pages是控制器文件,view是方法名,home是参数值

数据库的运算不是在控制类中进行的,而是在数据模型中,这样就可以容易地被反复使用,数据模型就是对数据库或其他数据存储方式进行取回、插入和更新的地方,在application/models/目录下新建news_model.php,CI规定,模型的文件名一定添加_model,类名与文件名一致并且类名首字母必须大写。

class News_model extends CI_Model
{

    function __construct()
    {
        $this->load->database();
    }
}

通过下面的脚本建立本地数据库

CREATE TABLE news (
  id int(11) NOT NULL AUTO_INCREMENT,
  title varchar(128) NOT NULL,
  slug varchar(128) NOT NULL,
  text text NOT NULL,
  PRIMARY KEY (id),
  KEY slug (slug)
);

在数据库新增几条测试数据

下面在模型文件里新增查询代码获取符合条件的news

function get_news($slug = FALSE)
{
    if ($slug === FALSE)
    {
        $query = $this->db->get(‘news‘);
        return $query->result_array();
    }

    $query = $this->db->get_where(‘news‘, array(‘slug‘ => $slug));
    return $query->row_array();
}

新增视图index.php,用于展示news列表

<?php foreach ($news as $item): ?>
    <h2><?php echo $item[‘title‘]; ?></h2>
    <div class="main">
        <?php echo $item[‘text‘]; ?>
    </div>
    <p>
        <a href="http://localhost:8080/studyci/1/index.php/news/view/<?php echo $item[‘slug‘]; ?>">
            View article
        </a>
    </p>
<?php endforeach ?>

新增视图view.php,用于展示新闻详情

<?php
    echo "<h2>{$news_item[‘title‘]}</h2>";
    echo $news_item[‘text‘] . "<br />";
?>

准备好模型和视图后,新增news控制器,其中包含index和view两个函数,分别跳转到两个视图

function index()
{
    $data[‘news‘] = $this->news_model->get_news();
    $data[‘title‘] = ‘News archive‘;

    $this->load->view(‘templates/header‘, $data);
    $this->load->view(‘news/index‘, $data);
    $this->load->view(‘templates/footer‘, $data);
}

function view($slug)
{
    $data[‘news_item‘] = $this->news_model->get_news($slug);

    if (empty($data[‘news_item‘]))
    {
        show_404();
    }

    $data[‘title‘] = $data[‘news_item‘][‘title‘];

    $this->load->view(‘templates/header‘, $data);
    $this->load->view(‘news/view‘, $data);
    $this->load->view(‘templates/footer‘, $data);
}

到此,实现了一个简单的MVC模式

下面的代码演示如何用表单插入一条记录,首先创建录入数据的表单/views/news/create.php

<h2>Create a news item</h2>
<?php echo validation_errors(); ?>
<?php echo form_open(‘news/create‘) ?>
    <label for="title">Title</label>
    <input type="input" name="title" /><br />
    <label for="text">Text</label>
    <textarea name="text"></textarea><br />
    <input type="submit" name="submit" value="Create news item" />
</form>

其中validation_errors()提供表单验错,form_open()可以调用控制器的函数

再新建插入输入成功时显示的视图/views/news/success.php

<?php
    echo "Add news success<br />";
?>

news控制器新建create函数

public function create()
{
    $this->load->helper(‘form‘);
    $this->load->library(‘form_validation‘);

    $data[‘title‘] = ‘Create a news item‘;

    $this->form_validation->set_rules(‘title‘, ‘Title‘, ‘required‘);
    $this->form_validation->set_rules(‘text‘, ‘text‘, ‘required‘);

    if ($this->form_validation->run() === FALSE)
    {
        $this->load->view(‘templates/header‘, $data);
        $this->load->view(‘news/create‘);
         $this->load->view(‘templates/footer‘);
    }
    else
    {
        $this->news_model->set_news();
        $this->load->view(‘templates/header‘, $data);
        $this->load->view(‘news/success‘);
        $this->load->view(‘templates/footer‘);
    }
}

插入记录失败时,重新显示create视图,插入成功显示success视图

最后新增模型中的set_news()方法

public function set_news()
{
    $this->load->helper(‘url‘);

    $slug = url_title($this->input->post(‘title‘), ‘dash‘, TRUE);

    $data = array(
        ‘title‘ => $this->input->post(‘title‘),
        ‘slug‘ => $slug,
        ‘text‘ => $this->input->post(‘text‘)
    );

    return $this->db->insert(‘news‘, $data);
}

插入功能就完成了,通过http://localhost:8080/studyci/1/index.php/news/create就可以访问新增页面了

时间: 2024-12-27 08:59:01

CodeIgniter 用户指南 基础教程 摘要的相关文章

Gradle用户指南之初学者教程(三)

写在前面的话: 博主最近在学习Android Studio相关的东西.Gradle相对于我这个从Eclipse转过来的Android开发者,也算是一个全新的事物.但它却承担着Android构建系统中相当重要的一环.本着与人方便,自己方便的精神,觉得有必要翻译一下<Gradle User Guide>中的Tutorials相关部分.由于英语水平相当有限,请大家多多指教. 文章地址:http://blog.csdn.net/mikulee/article/details/45478177 英文原文

OpenVAS漏洞扫描基础教程之创建用户

OpenVAS漏洞扫描基础教程之创建用户 OpenVAS管理服务 默认情况下,OpenVAS服务仅创建了一个名为admin的用户,而且是管理员用户(拥有最高的权限).如果想要其它客户端登陆的话,不可能都以管理员身份访问,否则导致服务器出现混乱,而且不方便管理.所以,为了方便管理OpenVAS服务,用户可以根据需求创建不同级别的用户和组.下面将分别介绍创建用户.组及修改用户角色的方法. OpenVAS创建用户 (1)在OpenVAS服务的主界面(如图1.6所示)依次单击Administration

分享《Python数据分析基础教程:NumPy学习指南(第2版)》高清中文PDF+英文PDF+源代码

下载:https://pan.baidu.com/s/1YSD97Gd3gmmPmNkvuG0eew更多资料分享:http://blog.51cto.com/3215120 <Python数据分析基础教程:NumPy学习指南(第2版)>高清中文PDF+高清英文PDF+源代码 高清中文版PDF,249页,带目录和书签,文字能够复制粘贴:高清英文版PDF,310页,带目录和书签,文字能够复制粘贴:中英文两版可以对比学习.配套源代码:经典书籍,讲解详细:其中高清中文版如图: 原文地址:http://

Numpy学习:《Python数据分析基础教程NumPy学习指南第2版》中文PDF+英文PDF+代码

NumPy是一个优秀的科学计算库,提供了很多实用的数学函数.强大的多维数组对象和优异的计算性能,不仅可以取代Matlab和Mathematica的许多功能,而且业已成为Python科学计算生态系统的重要组成部分.但与这些商业产品不同,它是免费的开源软件. 推荐学习<Python数据分析基础教程NumPy学习指南第2版>,通过书中丰富的示例,学会Matplotlib绘图,并结合使用其他Python科学计算库(如SciPy和Scikits),让工作更有成效,让代码更加简洁而高效. 学习参考: &l

Gradle 教程说明 用户指南 1~6章

要使用Android Studio,就需要这个构建工具. 本文是一个粗略的 官方用户指南 前6章的笔记,以示例驱动. 下载好最新版的Gradle(当前为2.2)后,解压.将Gradle的bin目录配置到环境变量中,以便在shell中可以使用gradle命令. 随便新建个目录(我这里建了一个名为builds的目录),cd进去,新建一个build.gradle文件,以下示例都编辑在build.gradle中. 说明:> 后 跟gradle命令. -q参数会关闭一些命令中的log信息,如 gradle

imooc’s html 基础教程笔记

imooc’s html 基础教程笔记 imooc’s html 基础教程 第一章 Html介绍 1.1 Html和CSS的关系 1.2认识html标签 1.3 标签的语法 1.4 认识html文件基本结构 1.5 认识head标签 1.6了解HTML的代码注释 2.1语义化,让你的网页更好的被搜索引擎理解 2.2 标签,网页上显示的内容放在这里 2.3 开始学习标签,添加段落 2.4 了解标签,为你的网页添加标题 2.5 加入强调语气,使用strong和em标签 2.6 使用span标签为文字

Python基础教程(第十章 自带电池)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5459376.html______ Created on Marlowes 现在已经介绍了Python语言的大部分基础知识.Python语言的核心非常强大,同时还提供了更多值得一试的工具.Python的标准安装中还包括一组模块,称为标准库(standard library).之前已经介绍了一些模块(例如math和cmath,其中包

《语义网基础教程》学习笔记(一)

一.XML概述 1.有效(valid)的XML文档:遵守了XML文档的基本规则,并使用DTD或Schema定义了语义约束,而且也完全遵守了DTD或Schema所定义的语义约束的XML文档 2.XML声明部分的encoding属性值应该与保存该文档所使用的字符集相同.如果需要让XML支持中文,应该注意以下几点: ①保存文件时使用支持中文的字符集 ②XML声明部分的encoding属性应该与保存该文件时所使用的字符集相同 3.XML元素里的多个属性之间是无序的,因此同一个元素不可包含多个同名的属性,

html快速入门(基础教程+资源推荐)

1.html究竟是什么? 从字面上理解,html是超文本标记语言hyper text mark-up language的首字母缩写,指的是一种通用web页面描述语言,是用来描述我们打开浏览器就能看到的各种web页面的. 所以说,写html代码根本和 编程都扯不上边,不要一听源码两个字就绝望,以为要你攻读计算机学位似的. 你只要知道当你要在网页中展示内容的时候该用哪个标记就可以了. 即使一开始记不 住,也没关系,查课本,问度娘,分分钟搞定,用过几次,想记不住都难. 最近风靡各大博客和写作平台的ma