CI框架-學習筆記

CodeIgniter框架
  •  
  • 1MVC
  •  
  • 1.1M:模型,提供數據,保存數據
  • 1.2V:視圖,只負責顯示,表單form
  • 1.3C:控制器,協調模型和視圖
  • 1.4action:動做,是控制器中的方法,用於被瀏覽器請求
  •  
  • 2CI中的MVC
  • CI簡介:CodeIgniter是一個輕量級但功能強大的php框架,基於MVC的設計模式。提供了一套豐富的類庫
  •  
  • 2.1、訪問的url使用的pathinfo
  • 2.2、格式:入口文件/控制器/動做(默認pathinfo格式)
  • 2.3application目錄:
  •  
  • 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.6CI框架會本身解決php中的短標籤<?=?>
  • 4.7、推薦使用:<?phpforeach($listas $key=>$val):?>…<?php endforeach;?>

  • 5、超級對象:當前控制器對象,提供了不少屬性
  •  
  • 5.1$this->load屬性
  • 5.1.1、裝載器類的實例 system/core/Loader.php
  • 5.1.2CI_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.2CI_URI提供的方法:
  • $this->uri->Segment(n)用於獲取URL中的第n個參數
  • 控制器表明1,動做表明2,值1表明3,值2表明爲4
  • 用法1:入口文件/控制器/動做/值1/值2
  • echo $this->uri->segment(3);//輸出值1
  • 用法2index.php/控制器/動做/6
  • //能夠直接獲取;參數必定要對應正確
  • publicfunction($id=0){
  • echo $id;//輸出6
  • }
  •  
  • 5.3$this->input屬性
  • 5.3.1、裝載器類的實例 system/core/Input.php
  • 5.3.2CI_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;
  •  
  • 9AR的連貫操做
  •  
  • 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.2where()條件
  • 條件符:「>」、「>=」、「<」、「<=」、「=」、「!=「;不指定條件付默認是」=「
  • 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.3join鏈接查詢
  • 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.二、經過join()第三個可選參數選擇鏈接,可選參數包括:left、 right、outer、 inner、left outer、right outer
  • 例如:
  • $this->db->select(「*」)
  • ->from(「user」)
  • ->join(「category」, 「user.id = category.id」,」left」)//經過第三個參數指定
  • ->get();
  • 十、擴展CI控制器
  •  
  • 10.一、擴展控制器
  • 一、在application/core新建一個本身的控制器(MY_Controller),新建的控制器繼承CI_Controller類,能夠從本身建立的控制器中進行擴展。
  • 例如:class MY_Controller extends CI_Controller{
  • Public function __consreuct(){
  • Parent::__construct(); //調用父類的構造方法
  • //登錄驗證
  • //權限驗證
  • }
  • }
  • 二、讓welcome.php繼承本身建立的控制器(MY_Controller),間接繼承CI_Controller。
  • 三、控制器前綴能夠修改
  • 在application/config/config.php中修改:
  • $config['subclass_prefix'] = 'MY_'; 
  • 十一、模型(model)
  • 11.一、模型文件命名:user_model.php 、category_model.php,文件名小寫
  • 建議:模型文件名使用_model爲後綴,防止與控制器類名衝突!
  • 11.二、全部的模型,直接或間接繼承自CI_Model類,類名首字母大寫
  • 11.三、裏面建立所須要的方法:getAll()…
  • 11.四、控制器中加載模型:$this->load->model(「模型文件名」); //不加後綴
  • 11.五、控制器中加載模型時起別名:$this->load->model(「模型文件名」,」別名」);
  • 加載成功後,會放入超級對象的屬性中,默認屬性名是模型文件名或別名
  • 11.六、控制器中調用模型,獲取數據:$this->模型文件名->方法名();
  • 例如:$this->load->model(「User_model」); //注意大小寫
  • $this->User_model->getAll(); //調用模型,獲取數據
  • 11.6.一、控制器中調用模型,獲取數據:$this->別名->方法名();
  • 例如:$this->load->model(「User_model」,」user」); //注意大小寫
  • $this->user->getAll(); //調用模型,獲取數據
  • 十二、CI中url相關函數
  • 12.一、加載輔助函數:$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/」);
  • 1三、CI中的路由與僞靜態、隱藏index.php入口文件
  • 13.一、路由設置
  •  
  • 在application/config/routes.php中設置/修改:
  •  
  • $route['default_controller'] = "welcome"; //默認的控制器爲welcome
  •  
  • 13.二、僞靜態設置
  • 在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.三、隱藏入口文件index.php
  • 13.3.一、開啓apache配置文件:LoadModule rewrite_module modules/mod_rewrite.so
  • 13.3.二、在入口文件統計目錄中,建立一個.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了
  •  
  • 1四、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頁,那麼你能夠看到34567頁。
  • 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就會表示記錄數
相關文章
相關標籤/搜索