本文參考 鏈接 介紹CodeIgniter如何將Controller連接Model層(操作數據庫),實現讀取新聞條目功能。通過本文串通Controller和Model以及View之間如何協同,控制。
有一點需要明確,關於數據庫的操作在model層,而非Controller層,Controller只負責業務控制邏輯,從model裡取數據然後送給view。phpmyadmin裡:
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)
);
新建個表。注意text類型的選utf8編碼,然後隨便插入兩條數據。
在models文件夾下新建News_model:
load->database();
}
public 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();
}
}
注意上面result_array()是返回查詢到所有的結果,row_array()是返回查詢的當前那條結果。關於數據庫的部分可以參考 鏈接
News.php
load->model(news_model);
$this->load->helper('url_helper');
}
/**
* 顯示所有新聞
*/
public 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');
}
/**
* 顯示某一個slug的新聞
* @param null $slug
*/
public function view($slug = NULL)
{
$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');
}
}
注意:
1,Controller如何加載Model?
在News的構造函數裡通過load->model('')裡將model目錄下對應名字的model加載進來,然後再使用時通過$this->news_model進行調用。
2,Model的名字是不區分大小寫的,即真正的model可以大寫,在load的時候可以寫成小寫。
3,Controller如何跟view層發生關系?
通過$this->load->view('')加載view文件夾下的文件,傳遞一個array。在Controller裡的array的key,在view下就是對應的變量名字。關於傳遞數據這塊可以參考 CI的模版解析類部分。
4,通過代碼可以看到,News這個控制器加載了view/news文件夾下的index.php 和view.php
>View article
注意:此處用了site_url設置超鏈接,用意是地址欄裡輸入news/slug能直接跳轉到news/view/slug,因此要設置路由。
view.php
'.$news_item['title'].''; echo $news_item['text'];
在原來基礎上,增加以下兩句:
$route['news'] = 'news'; $route['news/(:any)'] = 'news/view/$1';
在database.php裡配置下數據庫相關信息。
經過以上5步,一切ok。
浏覽器輸入:http://localhost/~yanzi/CodeIgniter/index.php/news

點擊超鏈接後http://localhost/~yanzi/CodeIgniter/index.php/news/slug1111 轉到以下:
