一、MVC
CodeIgniter 采用MVC架构即:控制层、模型层和视图层。
对应Application下面的文件夹 (图1):
所有新建文件以.php结尾
视图层 view 文件夹放入HTML模板
模型层 model 存放对数据库操作的代码
控制层 controllers 存放进行逻辑判断的代码,从模型层取得数据然后输入到视图层,发送给用户。
图1
功能:
1. 模板增加输入表单
2. 控制器增加接收表单数据的代码,并对用户输入进行简单校验。
3. 在表单上方输出标题和正文,以及发布时间。
用到的知识点:CI helper类(url) 和 输入类(input),
以及CI ActiveRecord 和向模板传值。
二、初始配置
1. 链接数据库
修改数据库配置:/application/config/database.php
'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'test', 'dbdriver' => 'mysqli', 'dbprefix' => 'ts_',
2. 修改默认路由
CI框架采用单文件入口的方式,默认必须通过index.php来访问控制层。比如controllers文件夹下有个名为test的class类,test有个叫home的function,
则访问URL为:http://www.example.com/index.php/test/home
三、输出页面
1. 直接输出HTML模板
新建两个文件分别位于controllers文件夹和views文件夹
Test.php
<?phpdefined('BASEPATH') OR exit('No direct script access allowed');class Test extends CI_Controller { public function home() { $this->load->view('home'); }}home.php<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?><!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Home</title></head><body> <h1>这是我们的主页</h1></body></html>
在浏览器打开类似如下地址:http://test.com/index.php/test/home
2. 插入数据库条目
创建数据库表ts_news
Test.php
<?phpdefined('BASEPATH') OR exit('No direct script access allowed');class Test extends CI_Controller {public function __construct(){parent::__construct();$this->load->helper('url');$this->load->model('news_model');}public function home(){$this->load->view('home');}public function add_news(){$title = $this->input->get('title',TRUE);$content = $this->input->get('content');if ( (strlen($title) < 20 ) or (strlen($content) < 20 ) ){echo '标题或正文内容过短';return false;}$arr = array('id' => '','title' => $title,'content' => $content,'update_time' => time(),'create_time' => time());$check = $this->news_model->insert($arr,'news');if ($check){redirect('test/home');}else{echo '提交失败';}}}home.php<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Home</title></head><body><h1>这是我们的主页</h1><hr><form action="<?php echo site_url('test/add_news'); ?>"><label for="title">标题</label><input type="text" name="title" value=""><br><label for="content">正文</label><textarea name="content" id="" cols="30" rows="10"></textarea><br><input type="submit" value="提交" ></form></body></html>News_model.php<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');class News_model extends CI_Model {public function __construct() { parent::__construct(); $this->load->database(); }public function insert($arr,$table){$this->db->insert($table, $arr); if ($this->db->affected_rows() > 0) { return $this->db->insert_id(); } else { return FALSE; }}}412ded80-4884-4a2f-ae37-6ba69cdc4278493498ee-0f5c-4676-9cec-38e5a3f3e6fd 3. 查询数据库并输出 News_model.php增加public function get_all($table) { $this->db->select('*'); $query = $this->db->get($table); $query = $query->result_array(); return $query; }Test.php 的 home修改为:public function home() { $news = $this->news_model->get_all('news'); $data['news'] = $news; $this->load->view('home',$data); }
Home模板的body修改为:
<body><h1>这是我们的主页</h1><?php foreach ($news as $key => $value) {echo '<div><h3>'.$value['title'].'</h3><span>发布时间:'.date('Y-m-d H:i:s',$value['create_time']).'</span><p>'.$value['content'].'</p></div>';}?><hr><form action="<?php echo site_url('test/add_news'); ?>"><label for="title">标题</label><input type="text" name="title" value=""><br><label for="content">正文</label><textarea name="content" id="" cols="30" rows="10"></textarea><br><input type="submit" value="提交" ></form></body>
刷新查看效果: