摘要:方法名不區分大小寫。當時有面試官還問過,我以為所有的框架都是,真是汗顏的屬性有等的超級對象類分段獲取從入口文件后,分斷獲取是按照后面開始的第一個段開始。
1.mvc一般思路
C層: 入口文件-URL獲取控制器$_GET["c"]和方法$_GET["a"]--包含c的文件類(控制器文件)- 實例化c控制器對象-調用方法a(并協調模型和視圖),C層不直接調用DB,下面會有提到。
V層: 在C層中include views下對應的文件即可展現C中變量,require ./views/xxView.html
M層:通過連接DB獲取所有的數據,return 給C層,這時候需要在C層require ./models/xxModel.php,最后在C中通過view 讓數據顯示出來。注意M只提供數據,做數據復用
注意action 是控制器中的方法,用于被瀏覽器直接請求
目錄結構
index.php
Model
UserModel.class.php
View
index.html
Controller
UserController.class.php2.CI中的pathinfo訪問模式
入口文件/控制器/方法
其中action中為protected functon 和private 不能被瀏覽器請求,注意Controller文件名需要小寫。方法中action (public functions)不能用_開始。
方法名不區分大小寫。
CI中都extends CI_CONTROLLER,注意前綴都為CI
注意不要建立Index控制器的index方法,類名相同的會當作構造方法。因為CI的控制器沒有后綴,所以類名會和方法名一樣,導致構造函數加載。
3.CI中的視圖視圖文件可以用下劃線區分,例如user_區分,但一般都建立多帶帶的文件夾,可以直接load視圖,不用寫擴展名。
$this->load->view("user/index"); $this->load->view("user_index");
注意視圖中可以直接寫php源碼。
CI中如果沒用smarty ,如果需要加載變量可以用
$this->load->var("title","this is title");
如果是二維數組,
$data[]=1; $data[]=2; $this->load->var($data);
可以多次load view,以加載不同的view公共部分。
推薦使用
=$item["id"]?> =$item["name"]?>4.CI的超級對象-LOAD
$this->load ===
$obj=new CI_LOADER(); $this->load=$obj; $this->load->view();
注意但ci并不是做的自動加載,并不是以上面那種方式運行的。當時有面試官還問過,我以為所有的框架都是spl_autoload_register,真是汗顏..
load的屬性有view var database model helper 等
5.CI的超級對象-CI_URI類分段獲取
segment 從入口文件.php后,分斷獲取
$this->uri->segment(4)是按照index.php/后面開始的第一個段開始。
之前的:入口文件.php/控制器/動作/參數1/值1/參數2/值2
CI中: 入口文件.php/控制器/動作/值1/值2
$this->segment(3);//值1
$this->segment(4);//值2
可以在方法的參數中傳遞參數,ci會按照順序獲取值
index.php/控制器/index/6/12
public function index($p=0,$age){ echo $p,$age;//6,12 }6.CI的超級對象 input對象
CI_INPUT類
$this->input->post("username"); 注意get的參數 用uri分段獲取.. $this->input->server("DOCUMENT_ROOT")
視圖里也可以通過$this訪問超級對象,因為就是include進來的
7.CI中的數據庫操作數據庫訪問SQL
先配置config/database.php
裝載數據庫操作類,可以加載多個數據庫
$this->load->databases(); //var_dump($this->db); $res=$this->db->query("select * from user");// return object $user_list=$res->result(); //注意返回的返回數組下的某(多)個對象,對應mysql_fetch_object $data["user_list"]=$user_list $this->load->view("user/list/",$data)//view 層用 user_list展現 $res->result_array();返回關聯數組 $res->row();返回第一條數據,也是個對象 $res->row_array();返回第一條數據,數組
更多官方參考
插入數據
$this->load->database();//可以在auto中自動加載db類 $sql="insert into user ("name","pwd") values("tom","md5(123)")"; $this->db->query();//MYSQL_QUERY() [return RES or BOOL]
MYSQL_AFFECT_ROWS 對應CI中的$this->db->affect_rows();
MYSQL_INSERT_ID 對應CI 中的 $this->db->insert_id();
用此db處理方法,第一需要自己寫表前綴,第二需要自己處理安全措施。
表前綴可以借助配置文件讀取 常量,CI中有**SWAP_PRE**,交換的前綴來處理表前綴。萬一數據庫表前綴修改,只需要修改DBPREFIX就行了。
安全措施可以借助 $this->input->post("name");
$data[0]="tom"; $data[1]="123";
參數綁定插入
$sql="insert into user ("name","pwd") values("?","?")";
將data拼裝為數組,作為$this->db->query($sql,$data);
參數綁定查詢
$sql="select * from user where username=?"; $this->query($sql,$username);8.CI中的AR模型
是CI中訪問數據庫的第二種方式,第一種就是上面的load->database();增刪改差 都是query。需要寫大量sql語句
配置文件autoload 自動加載database
$auto_load["librarys"]=array("database"); CI_DB_ATCIVE_record extends ci_db_driver
config/database中的active_record需要打開,這樣才會繼承ACTIVE
$res=$this->db->get("user");//user 表名,會自動加表前綴 var_dump($res->result);
插入:
$data=["name"=>"tom","pwd"=>"md5(123)"]; $this->db->insert("user",$data);//表名+關聯數組=》return bool
修改:
$data=["email"=>tom@126.com,"pwd"=>"md5(1234)"]; $this->db->update("user",$data,array("id"=>3));// 表名,數據,where 條件。=?return bool
刪除
$this->db->delete("user",array(id=>3));
AR中連貫操作
$this->db ->select("id,name")//字段名 ->where ("id ">=3)//需要有空格 ->limit(3,2)//跳過2條,取三條 ->order_by("id desc"); ->get();
調試sql語句輸出最后一條sql ,可以結合log函數輸出到指定日志文件
$this->db->last_query(); $res=$this->db->where("name","tom")->get("USER");//SELECT * FROM USER WHERE NAME=TOM;
具體可點擊這里查看更多連貫操作
如果太復雜的,那就寫SQL吧,記得用?綁定參數,過濾接受參數等
自增id
$this->db->insert_id();
受影響行
$this->db->affect_rows();9.對CI控制器擴展
APPLICATION和SYSTEM文件夾中相同的部分 ,只需要在application中對應的Core中寫MY_擴展。
比如在application/core/MY_Controller.php
class MY_Controller extends CI_Controller{ public function __construct(){ parent::construct(); //登錄驗證 } }
可以修改類前綴 在
config/config.php/$config["subclass_prefix"]中,默認為MY_
一些注意事項:文件需要全小寫,但是類名要大寫,并且需要用User_model,為了和控制器保持區分不沖突。
在模型MODEL中可以用所有超級對象的屬性,可以具體查看system/core/CI_MODEL.php 文件
不要在控制器直接調用$this->db->get()文章頭提到【雖然可以實現相同功能,但是很不規范】應該放在model中,控制器中只允許從user_model中load
user controoler中代碼:在控制器中加載模型
$this->load->model("user_model");//第二個參數為別名,可選 $list=$this->user_model->getall(); $this->load->view("user/index",array("list"=>$list));
user_model代碼:
class user_model extends ci_model{ public function getall(){ $res=$this->db->get("user"); return $res->result(); } }11.url相關函數
需要手動加載:
$this->load->helper("url");
解決不同環境,不同路徑的問題
site_url
base_url
類似與wordpress那些東西
可以自動加載
$autoload["helper"]=array("url")12.路由配置
默認控制器 default_controller
通過路由規則,實現url與實際控制器相分離.實現url的高度定制
http://site.com/index.php/news/20170108/4.html $route["news/[d]{6}/([d]+.html)"]="article/show/$1"
另外結合apache/nginx的rewrite 隱藏index.php
13.分頁$this->laod->library("pagination");
注意load url,然后用site_url,放入page的初始化函數中,用segment獲取對應的intval(段),作為offset
CI中更多細節請點這里文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22278.html
摘要:通過這個函數可以很方便的在程序運行期間執行很多常見操作。此文可以轉載,但轉載前需要發郵件到進行溝通,未溝通的均視作侵權。 index.php index.php 是整個框架的入口文件,也就是說所有的請求都要從它這里開始。因為 index.php 源碼非常簡潔,那么我們直接放一張源碼截圖,按著截圖說一下源碼。 showImg(https://segmentfault.com/img/re...
摘要:版權聲明可轉載,但不論任何媒體都需要在轉載前與本人溝通,并在轉載時注明出處。的各個核心模塊以模塊名為目錄名分別存儲在這個目錄下。下一篇文章會涉及到和。此文可以轉載,但轉載前需要發郵件到進行溝通,未溝通的均視作侵權。 寫在前面: 為什么選擇開發過程中的 CI 4 作為源碼解讀版本:(1)首先我選 CI 是因為它之前的穩定版都是相對比較輕量小巧的,而且可以認為是簡單的。(2)為什么沒有選...
摘要:行,判斷如果為空,那么返回默認路由。行,把處理完畢后找到的返回。方法該方法是自動按著約定規則去目錄去找路由的過程。此文可以轉載,但轉載前需要發郵件到進行溝通,未溝通的均視作侵權。 前言 我個人覺得在當前 MVC 流行的架構下,要想去了解一個框架,或者是一個基于此架構下的應用程序,最好的入手方式就是先看路由,雖然路由不是 MVC 里的任何一個,但是知道了路由的來龍去脈就知道了整個框架或者...
摘要:支持命名空間是沒有支持命名空間的。配置文件不再是簡單數組了新的配置文件是以對象組織的,各個配置以對象的屬性形式暴露出來。此文可以轉載,但轉載前需要發郵件到進行溝通,未溝通的均視作侵權。 前言 CI 為了追上大家的腳步,這次跨了一大步,盡量使用了更多的流行設計理念,甚至連 PHP 的支持版本都是從 7 開始起步的。我在之前閱讀源碼的同時也發現了很多變化的地方,在此把已經發現的列舉出來,不...
摘要:王者榮耀項目組高級測試工程師工程師文化團隊中的實踐本文不是一篇入門教程,而是從結合實際場景,闡述在團隊協作中如何去好好地應用。 CI Weekly 圍繞『 軟件工程效率提升』 進行一系列技術內容分享,包括國內外持續集成、持續交付,持續部署、自動化測試、 DevOps 等實踐教程、工具與資源,以及一些工程師文化相關的程序員 Tips 。同步于 flow.ci Blog、微信公眾號、官方微...
閱讀 8893·2021-11-18 10:02
閱讀 2578·2019-08-30 15:43
閱讀 2652·2019-08-30 13:50
閱讀 1364·2019-08-30 11:20
閱讀 2702·2019-08-29 15:03
閱讀 3624·2019-08-29 12:36
閱讀 927·2019-08-23 17:04
閱讀 614·2019-08-23 14:18