1. 程式人生 > >CodeIgniter框架使用總結

CodeIgniter框架使用總結

CodeIgniter框架
 1、回憶MVC
 1.1、M:模型,提供資料,儲存資料
1.2、V:檢視,只負責顯示,表單form
1.3、C:控制器,協調模型和檢視
1.4、action:動作,是控制器中的方法,用於被瀏覽器請求
 
2、CI中的MVC
CI簡介:CodeIgniter是一個輕量級但功能強大的php框架,基於MVC的設計模式。提供了一套豐富的類庫
 
2.1、訪問的url使用的pathinfo
2.2、格式:入口檔案/控制器/動作(預設pathinfo格式)
2.3、application目錄:
 
Controllers控制器
Models模型
Views檢視
 
2.4、預設的控制器是welcome
2.5、預設的動作是index
2.6、檔名全部小寫

3、控制器(controller):
3.1、不需要加字尾,直接是類名.php
3.2、檔名全部小寫,例如 user.php(大寫的檔名瀏覽器不支援)
3.3、所有的控制器,直接或間接繼承自CI_Controller類,類名首字母大寫
3.4、方法名不區分大小寫
 
動作要求:1.必須以public開頭
 
2.不能以下劃線(_)開頭
注意!方法名與類名相同,會被php當做構造方法(__construct)
 
4、檢視(view)
 
4.1、在控制器中載入檢視:$this->load->view(“user_add”);//不加副檔名
4.2、在控制器中載入檢視:$this->load->view(“user/add”);//不加副檔名
注意:可以多次呼叫$this->load->view(檢視);
4.3、檢視中,直接使用原生php程式碼
4.4、在控制器中分配變數:$this->load->vars(“檢視中變數名”,php中變數名);
 
例如:$str=“abcdefg”;
$this->load->vars(“str”,$str);
檢視中使用:<?php echo $str;?>
 
4.5、在控制器中分配多個變數:
 
例如:$str=“abcd”;
$list = array(“id”=>”1”,”name”=>”zhangsan”,”pwd”=>”1234”);
$data[“str”]= $str;
$data[“list”]= $list;
$this->load->vars($data);
 
4.6、CI框架會自己解決php中的短標籤<?=…?>
4.7、推薦使用:<?phpforeach($listas $key=>$val):?>…<?php endforeach;?>

5、超級物件:當前控制器物件,提供了很多屬性
 
5.1、$this->load屬性
5.1.1、裝載器類的例項 system/core/Loader.php
5.1.2、CI_Loader提供的方法:
$this->load->view()裝載檢視
$this->load->vars()分配變數到檢視
$this->load->database()裝載資料庫操作物件
$this->load->model()裝載模型物件
$this->load->helper()幫助物件
$this->load->view(“檢視名”,$變數名)裝載檢視時分配變數
 
5.2、$this->uri屬性
5.2.1、裝載器類的例項 system/core/URI.php
5.2.2、CI_URI提供的方法:
$this->uri->Segment(n)用於獲取URL中的第n個引數
控制器代表1,動作代表2,值1代表3,值2代表為4…
用法1:入口檔案/控制器/動作/值1/值2
echo $this->uri->segment(3);//輸出值1
用法2:index.php/控制器/動作/6
//可以直接獲取;引數一定要對應正確
publicfunction($id=0){
echo $id;//輸出6
}
 
5.3、$this->input屬性
5.3.1、裝載器類的例項 system/core/Input.php
5.3.2、CI_Input提供的方法:
 
$this->input->post(‘username’);//$_POST[“username”];
$this->input->server(“DOCUMENT_ROOT”);//$_SERVER[“DOCUMENT_ROOT”]
$this->input->server(“REMOTE_ADDR”);//客戶端IP
$this->input->server(“SERVER_ADDR”);//伺服器端IP
注意:在檢視中,可以直接用$this來訪問超級物件中的屬性
 
6、訪問資料庫
 
6.1、修改配置檔案:application/config/database.php
6.2、裝載資料庫操作類:$this->load->database();
載入成功後,會放入超級物件的屬性中,預設屬性名是db
$this->db
6.3、$query= $this->db->query($sql);//返回值是物件(array_fetch_object)
$sql = $this->db->last_query($sql);//顯示最後一條執行的sql語句
6.3.1、$query= $this->db->escape();//此函式會確定資料型別,對字串型別資料轉義
6.4、$list= $query->result();//返回陣列,陣列中是一個一個的物件
6.5、$list= $query->result_array();//返回二維陣列,裡面是關聯陣列
6.6、$row= $query->row();//返回第一條資料,直接是一個物件
6.7、$row= $query->row_array();//返回第一條資料,是一個數組
6.8、$count= $query->num_rows();//返回結果集的行數
6.9、$field= $query->num_fields();//返回請求的欄位數
6.10、$count= $query->affected_rows();//返回受影響的行數
6.11、$id= $query->insert_id();//返回自增ID
 
7、資料庫中的配置
7.1、自動載入db:
在application/config/autoload.php中配置:
$autoload[“libraries”]= array(“database”);
這樣就不需要 $this->load->database();

7.2、引數繫結
$name = $this->input->post(“name”);
$pwd = $this->input->post(“pwd”);
//使用問號繫結引數
$data[0]= $name;
$data[1]= $pwd;//用二維陣列傳遞值
$sql =“insertinto ci_user(name,pwd) values (?,?)”;//多個問號,需要傳一個索引陣列
$bool = $this->db->query($sql,$data);//返回值是boolean
7.3、表字首配置
在application/config/database.php中配置:
$db[‘default’][‘dbprefix’]=‘ci_’;
$db[‘default’][‘swap_pre’]=‘ci_’;
配置為一樣,程式碼中,直接編寫表字首後面的名就行了,如果以後專案表字首發生變化,只需要修改$db[‘default’][‘dbprefix’]=‘new_’,程式碼中ci_會自動替換為new_
 
8、資料庫操作(AR模型)
8.1、配置application/cinfig/database.php中
$active_record = TRUE;
8.2、在配置檔案中,配置表字首後,會自動新增
8.3、查詢(get):
$res = $this->db->get(‘表名’);//返回結果集物件
$list = $res->result();//返回陣列,陣列中是一個一個的物件
$list = $res->result_array();//返回二維陣列,裡面是關聯陣列
8.4、插入(insert):
//資料使用關聯陣列
$data[“資料庫欄位名”]=值;//$this->input->post(“name”);
$data[“資料庫欄位名”]=值;
$res = $this->db->insert(“資料表名”,$data);//返回結果boolean;
8.5、修改(update):
//資料使用關聯陣列
$data[“資料庫欄位名”]=值;//$this->input->post(“name”);
$data[“資料庫欄位名”]=值;
$where = array(“id”=>”4”);
$res = $this->db->update(“資料表名”,$data,$where);//返回結果boolean;
8.6、刪除(delete):
$where = array(“id”=>”4”);
$res = $this->db->dalete(“資料表名”, $where);//返回結果boolean;
 
9、AR的連貫操作
 
9.1、$res= $this->db->select("id,name")//查詢的欄位
->from("user")//資料表名
->where("id >",3)//條件 id與>之間必須要有空格
->order_by("id desc")//排序
->limit(3,1)//分頁;表示跳過1條,取3條,與tp相反
->get();//獲取資料
$list = $res->result_array();
9.2、where()條件
條件符:“>”、“>=”、“<”、“<=”、“=”、“!=“;不指定條件付預設是”=“
1、只有單個條件時:
9.2.1、$res= $this->db->where(“欄位”,”值”)->get();
例如:$res= $this->db->where(“name”,”admin”)->get();//自動會加上“=”
9.2.2、$res= $this->db->where(“欄位=”,”值”)->get();
例如:$res= $this->db->where(“name=”,”admin”)->get();//必須要有空格
2、有多個條件時:用array()
9.2.3、$res= $this->db->where(array(“欄位”=>”值”,“欄位”=>”值”))->get();
例如:$res= $this->db->where(array(“name”=>”admin”,“id>3”=>”2”))->get();
9.2.4、複雜的查詢語句使用$this->db->query($sql,$data);//使用問號繫結引數
9.3、join連線查詢
9.3.1、預設為左查詢(left join … on)
$this->db->select(“欄位”)
->from(“資料表名”)
->join('連線表','連線條件')
->get();    //預設為左查詢(left join … on) 例如:
$this->db->select(“*”)
->from(“user”)
->join('category', user.id= category.id)//預設為左查詢(left join )
->get();
9.3.2、通過join()第三個可選引數選擇連線,可選引數包括:left、 right、outer、 inner、left outer、right outer
例如:
$this->db->select(“*”)
->from(“user”)
->join(“category”, “user.id = category.id”,”left”)//通過第三個引數指定
->get();
10、擴充套件CI控制器
 
10.1、擴充套件控制器
1、在application/core新建一個自己的控制器(MY_Controller),新建的控制器繼承CI_Controller類,可以從自己建立的控制器中進行擴充套件。
例如:class MY_Controller extends CI_Controller{
Public function __consreuct(){
Parent::__construct(); //呼叫父類的構造方法
//登陸驗證
//許可權驗證
}
}
2、讓welcome.php繼承自己建立的控制器(MY_Controller),間接繼承CI_Controller。
3、控制器字首可以修改
在application/config/config.php中修改:
$config['subclass_prefix'] = 'MY_'; 
11、模型(model)
11.1、模型檔案命名:user_model.php 、category_model.php,檔名小寫
建議:模型檔名使用_model為字尾,防止與控制器類名衝突!
11.2、所有的模型,直接或間接繼承自CI_Model類,類名首字母大寫
11.3、裡面建立所需要的方法:getAll()…
11.4、控制器中載入模型:$this->load->model(“模型檔名”); //不加字尾
11.5、控制器中載入模型時起別名:$this->load->model(“模型檔名”,”別名”);
載入成功後,會放入超級物件的屬性中,預設屬性名是模型檔名或別名
11.6、控制器中呼叫模型,獲取資料:$this->模型檔名->方法名();
例如:$this->load->model(“User_model”); //注意大小寫
$this->User_model->getAll(); //呼叫模型,獲取資料
11.6.1、控制器中呼叫模型,獲取資料:$this->別名->方法名();
例如:$this->load->model(“User_model”,”user”); //注意大小寫
$this->user->getAll(); //呼叫模型,獲取資料
12、CI中url相關函式
12.1、載入輔助函式:$this->load->helper(“url”);
配置自動載入輔助函式:在application/config/autoload.php中配置
$autoload['helper'] = array('url');
就不用寫$this->load->helper(“url”);
輔助函式:
site_url(“控制器/動作/引數”) ; //處理url及引數
在檢視中使用<?php echo site_url(“控制器/動作/引數”)?>
base_url();//返回網站的根目錄(“ci/”);
13、CI中的路由與偽靜態、隱藏index.php入口檔案
13.1、路由設定
 
在application/config/routes.php中設定/修改:
 
$route['default_controller'] = "welcome"; //預設的控制器為welcome
 
13.2、偽靜態設定
在application/config/routes.php中設定/修改:
//正則匹配(控制器/)
$route['news/[\d]{6}/([\d\w]+)\.html'] = 'user/show/$1';
http://localhost/CI/index.php/news/201401/caolizhi66.html
將動作news中的引數路由到user/show/$1
 
13.3、隱藏入口檔案index.php
13.3.1、開啟apache配置檔案:LoadModule rewrite_module modules/mod_rewrite.so
13.3.2、在入口檔案統計目錄中,建立一個.htaccess檔案,內容如下:
<IFModule mod_rewrite.c>
RewriteEngine on //啟用偽靜態
RewriteCond %{REQUEST_FILENAME} !-d //匹配不存在的目錄
RewriteCond %{REQUEST_FILENAME} !-f //匹配不存在的檔案
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] //重寫規則
</IFModule>
 
這樣就不用寫入口檔案index.php了
 
14、CI中的分頁
$this->load->library('pagination');
1 $config['base_url'] = $url;
2 /* 分頁的基礎 URL
3 如果你想用a、b的連結形式,則該url應該形式如/news/page/
4 如果連結是c、d的形式,則url應該如/news?
5 */
6 $config['total_rows'] = $total;//記錄總數,這個沒什麼好說的了,就是你從資料庫取得記錄總數
7 $config['per_page'] = $pagesize; //每頁條數。額,這個也沒什麼好說的。。自己設定。預設為10好像。
8 $config['page_query_string'] = TRUE;
9 /*傳參形式。開啟true則會自動在你的url後面加上&per_page=3。(這個per_page是預設的查詢字元,當然你也可以用$config['query_string_segment']來自己設定)
10 因此c、d中的形式一般是為localhost/news?&per_page=2不過都一樣,沒什麼影響。get的per_page還是3
11 */
12 $config['first_link'] = '首頁'; // 第一頁顯示
13 $config['last_link'] = '末頁'; // 最後一頁顯示
14 $config['next_link'] = '下一頁>'; // 下一頁顯示
15 $config['prev_link'] = '<上一頁'; // 上一頁顯示
16 $config['cur_tag_open'] = '<aclass="current">'; // 當前頁開始樣式
17 $config['cur_tag_close'] = '</a>';
18 /*當前頁結束樣式。這些你可以自己嘗試一下。
19 比如說我想讓當前頁的分頁數字樣式好看一點,紅色字型等。你就可以在current上加上css程式碼
20*/
21 $config['num_links'] = 2;//當前連線前後顯示頁碼個數。意思就是說你當前頁是第5頁,那麼你可以看到3、4、5、6、7頁。
22 $config['uri_segment']=4;
23/*這個是你在用a)、b)連結樣式的時候,用來判斷頁頁數。
24 比如localhost/news/page/3 這個uri_segment就要設定為3。localhost/news/title/page/3這個就要設定為4
25 */
26 $config['use_page_numbers']= TRUE;
27/*這個就是a)、b)的差別了。開啟了,page就會表示頁數。false就會表示記錄數
15.定義常量
    constants.php
    //自定義常量  define('GATEWAY_URL', 'http://pay.bebanks.com');