CI框架簡單使用


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');


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM