轉自:http://blog.sina.com.cn/s/blog_7b60d05f0101tl9h.html
在開發的時候架構是十分重要的,目前有很多架構,WPF中比較出名的MVVM等,這些都是用來組織開發檔案的,就是把一個應用分開來寫。下面總結一下CI架構的用法。
CI架構是基於MVC的,分別是
Models:模型,用來擺放實體類,工具類,資料庫訪問類等,屬於背景資料支援與類型支援。
Controls:控制器,當做一個交警的作用,就是控制內部資料和外部介面的協調,所以這個是在M和V中間做調節作用了,竟然是調節作用,那麼就需要掌握一些東西:怎麼和M交流,怎麼和V交流,還有使用者是怎麼和自己交流呢。這些都是比較核心,比較重要的東西,下面會總結。
Views:視圖,這個就是介面了,反饋給使用者操作的介面了,主要用html來寫,這個大家懂了。
下面分幾步來介紹和總結CI的使用:
1、準備工作。
2、檔案介紹。
3、M、C、V之間的通訊方式。
(一)下載,地址http://codeigniter.org.cn/下載完成就是應用程式的架構了,然後放在伺服器www檔案底下,看一下檔案PHP開發架構,如下圖:
(二)然後有兩個檔案夾,一個是Application,這個是應用程式檔案放的地方,進去裡面看一下:
PHP開發架構–CodeIgniter(CI)使用總結這裡可以看到MVC了,controllers,models,views分別放各自的檔案,然後有一個config檔案夾,用來裝設定檔的。
返回去system檔案夾裡面就是存在開發這個架構的團隊寫的一些使用類,我們不用去修改,可以直接用。十分簡單,,十分明了。
(三)這裡就是重點了,在學會用一個架構的時候,架構之間的元素的通訊方式必須要清楚,這樣就能開搞。先說一下CI架構的思想,使用者是通過訪問一個controller中的方法來訪問一個頁面的,所以這個controller就起著十分重要的角色了,上面說過它是交通警察,負責監視內部資料變化和反饋介面,接受介面資訊反饋內部資料等作用。
下面說幾個主要的通訊:
1.使用者與controller的通訊,竟然使用者是通過訪問C中的方法來訪問頁面,那麼使用者與方法的通訊就通過參數來了,使用者能在URL中直接寫參數,按順序,例如http://localhost/CI/index.php/hello/sayhello/Jarvin/Afternoon
這裡就訪問hello這個controller中的sayhello方法,看方法:
PHP開發架構–CodeIgniter(CI)使用總結
我看這樣就明了了,第一個參數Jarvin第二個參數Afternoon.
2.controller與View的通訊,雖然說能混編html來進行介面表述,但是竟然是用mvc那麼就要分開,分到View裡面,在Views檔案夾裡面寫好html檔案,這些檔案能是完整的全頁面html也能是部分html,例如說頭部,身部,尾部等。寫好以後就通過Controller來引用Views中的view來展示東西了。,竟然能在Controller中引用介面檔案,那麼怎麼調用,這個是重要的:
$this->load->view(“text_view.php”);在函數裡面加上這句就是引用一個views中的檔案了。如果想調用多個,例如要一次把頭,身,尾調用進去,那麼直接在下面添加多兩條一樣的,改個名稱就OK,還要一個重要的是Controller怎麼跟view通訊呢。。。答案是利用數組,然後在第一個引用後面傳入數組.下面看例子:
function show() { $name="Jarvin"; $count=1; $data= array('Name'=>$name,'num'=>$count); $this->load->view("text_view.php",$data);//調用一個視圖 }
這樣傳過去,然後那邊怎麼接呢,如下圖:
3.Controller與model的通訊.
用來提交給view的資料很多時候不是寫死的,那麼動態資料就要用到資料庫,那麼久要用到Model了。,下面總結一下製作一個Model類進行對資料庫進行增刪改除。
其實啊,Controller調用Model類中的函數,然後傳入參數進行通訊,形式與C和V通訊差不多。
首先是建立一個模型類,建立一個模型類的模型是:
class ClassName extends CI_Model//注意要繼承CI_Model類{ function __construct() { parent::__construct();//建構函式裡面要調用父類的構造方法 $this->load->database();//載入資料庫,資料庫名稱在Config檔案裡面配置。,還有其他資訊,例如密碼等 }//下面寫函數。}
下面給出測試model類:
<?phpclass Test_m extends CI_Model{ function __construct() { parent::__construct(); $this->load->database(); } function user_insert($arr) { $this->db->insert("person",$arr); } function user_update($name,$arr) { $this->db->where("Name",$name); $this->db->update("person",$arr); } function user_delete($name) { $this->db->where("Name",$name); $this->db->delete("person"); } function user_select($name) { $this->db->where("Name",$name); $this->db->select("*"); $query= $this->db->get("person"); return $query->result(); }}?>
然後在controllers裡面建立一個controller,來使用這個模型類的功能:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');class User extends CI_Controller {//繼承是必須的。。 function insert() { $this->load->model('Test_m'); $arr=array('Name'=>'fff','Age'=>21); $this->Test_m->user_insert($arr); } function update() { $this->load->model('Test_m'); $arr=array('Name'=>'gg','Age'=>12); $this->Test_m->user_update('J',$arr); } function delete() { $this->load->model('Test_m'); $this->Test_m->user_delete("Ken"); } function select() { $this->load->model('Test_m'); var_dump($this->Test_m->user_select("ggg")); } }?>
OK了,研究下就好。十分簡單