成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

CI 框架簡單入門筆記

Kross / 1298人閱讀

摘要:方法名不區(qū)分大小寫。當時有面試官還問過,我以為所有的框架都是,真是汗顏的屬性有等的超級對象類分段獲取從入口文件后,分斷獲取是按照后面開始的第一個段開始。

1.mvc一般思路

C層: 入口文件-URL獲取控制器$_GET["c"]和方法$_GET["a"]--包含c的文件類(控制器文件)- 實例化c控制器對象-調(diào)用方法a(并協(xié)調(diào)模型和視圖),C層不直接調(diào)用DB,下面會有提到。

V層: 在C層中include views下對應的文件即可展現(xiàn)C中變量,require ./views/xxView.html

M層:通過連接DB獲取所有的數(shù)據(jù),return 給C層,這時候需要在C層require ./models/xxModel.php,最后在C中通過view 讓數(shù)據(jù)顯示出來。注意M只提供數(shù)據(jù),做數(shù)據(jù)復用

注意action 是控制器中的方法,用于被瀏覽器直接請求

目錄結(jié)構(gòu)

index.php

Model

UserModel.class.php

View

index.html

Controller

UserController.class.php
2.CI中的pathinfo訪問模式

入口文件/控制器/方法

其中action中為protected functon 和private 不能被瀏覽器請求,注意Controller文件名需要小寫。方法中action (public functions)不能用_開始。

方法名不區(qū)分大小寫。

CI中都extends CI_CONTROLLER,注意前綴都為CI

注意不要建立Index控制器的index方法,類名相同的會當作構(gòu)造方法。因為CI的控制器沒有后綴,所以類名會和方法名一樣,導致構(gòu)造函數(shù)加載。

3.CI中的視圖

視圖文件可以用下劃線區(qū)分,例如user_區(qū)分,但一般都建立多帶帶的文件夾,可以直接load視圖,不用寫擴展名。

$this->load->view("user/index");
$this->load->view("user_index");

注意視圖中可以直接寫php源碼。

CI中如果沒用smarty ,如果需要加載變量可以用

$this->load->var("title","this is title");

如果是二維數(shù)組,

$data[]=1;
$data[]=2;
$this->load->var($data);

可以多次load view,以加載不同的view公共部分。

推薦使用





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/控制器/動作/參數(shù)1/值1/參數(shù)2/值2
CI中: 入口文件.php/控制器/動作/值1/值2

$this->segment(3);//值1
$this->segment(4);//值2

可以在方法的參數(shù)中傳遞參數(shù),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的參數(shù) 用uri分段獲取..

$this->input->server("DOCUMENT_ROOT")

視圖里也可以通過$this訪問超級對象,因為就是include進來的

7.CI中的數(shù)據(jù)庫操作

數(shù)據(jù)庫訪問SQL

先配置config/database.php

裝載數(shù)據(jù)庫操作類,可以加載多個數(shù)據(jù)庫

$this->load->databases();
//var_dump($this->db);
$res=$this->db->query("select * from user");// return object
$user_list=$res->result();
//注意返回的返回數(shù)組下的某(多)個對象,對應mysql_fetch_object

$data["user_list"]=$user_list
$this->load->view("user/list/",$data)//view 層用 user_list展現(xiàn)

$res->result_array();返回關(guān)聯(lián)數(shù)組
$res->row();返回第一條數(shù)據(jù),也是個對象
$res->row_array();返回第一條數(shù)據(jù),數(shù)組

更多官方參考

插入數(shù)據(jù)

$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**,交換的前綴來處理表前綴。萬一數(shù)據(jù)庫表前綴修改,只需要修改DBPREFIX就行了。

安全措施可以借助 $this->input->post("name");

$data[0]="tom";
$data[1]="123";

參數(shù)綁定插入

$sql="insert into user ("name","pwd") values("?","?")";

將data拼裝為數(shù)組,作為$this->db->query($sql,$data);

參數(shù)綁定查詢

$sql="select * from user where username=?";
$this->query($sql,$username);
8.CI中的AR模型

是CI中訪問數(shù)據(jù)庫的第二種方式,第一種就是上面的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);//表名+關(guān)聯(lián)數(shù)組=》return bool

修改:

$data=["email"=>[email protected],"pwd"=>"md5(1234)"];
$this->db->update("user",$data,array("id"=>3));// 表名,數(shù)據(jù),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();

調(diào)試sql語句輸出最后一條sql ,可以結(jié)合log函數(shù)輸出到指定日志文件

$this->db->last_query();

$res=$this->db->where("name","tom")->get("USER");//SELECT * FROM USER WHERE NAME=TOM;

具體可點擊這里查看更多連貫操作

如果太復雜的,那就寫SQL吧,記得用?綁定參數(shù),過濾接受參數(shù)等

自增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_

10.CI中的模型Model

一些注意事項:文件需要全小寫,但是類名要大寫,并且需要用User_model,為了和控制器保持區(qū)分不沖突。

在模型MODEL中可以用所有超級對象的屬性,可以具體查看system/core/CI_MODEL.php 文件

不要在控制器直接調(diào)用$this->db->get()文章頭提到【雖然可以實現(xiàn)相同功能,但是很不規(guī)范】應該放在model中,控制器中只允許從user_model中l(wèi)oad

user controoler中代碼:在控制器中加載模型

$this->load->model("user_model");//第二個參數(shù)為別名,可選

 $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相關(guān)函數(shù)

需要手動加載:

$this->load->helper("url");

解決不同環(huán)境,不同路徑的問題
site_url
base_url
類似與wordpress那些東西

可以自動加載

 $autoload["helper"]=array("url")
12.路由配置

默認控制器 default_controller

通過路由規(guī)則,實現(xiàn)url與實際控制器相分離.實現(xiàn)url的高度定制

http://site.com/index.php/news/20170108/4.html
$route["news/[d]{6}/([d]+.html)"]="article/show/$1"

另外結(jié)合apache/nginx的rewrite 隱藏index.php

13.分頁
$this->laod->library("pagination");

注意load url,然后用site_url,放入page的初始化函數(shù)中,用segment獲取對應的intval(段),作為offset

CI中更多細節(jié)請點這里

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/22278.html

相關(guān)文章

  • Codeigniter 4.0-dev 版源碼學習筆記之二——入口以及初始化操作

    摘要:通過這個函數(shù)可以很方便的在程序運行期間執(zhí)行很多常見操作。此文可以轉(zhuǎn)載,但轉(zhuǎn)載前需要發(fā)郵件到進行溝通,未溝通的均視作侵權(quán)。 index.php index.php 是整個框架的入口文件,也就是說所有的請求都要從它這里開始。因為 index.php 源碼非常簡潔,那么我們直接放一張源碼截圖,按著截圖說一下源碼。 showImg(https://segmentfault.com/img/re...

    _ivan 評論0 收藏0
  • Codeigniter 4.0-dev 版源碼學習筆記之一——前言以及 CI 4 預覽

    摘要:版權(quán)聲明可轉(zhuǎn)載,但不論任何媒體都需要在轉(zhuǎn)載前與本人溝通,并在轉(zhuǎn)載時注明出處。的各個核心模塊以模塊名為目錄名分別存儲在這個目錄下。下一篇文章會涉及到和。此文可以轉(zhuǎn)載,但轉(zhuǎn)載前需要發(fā)郵件到進行溝通,未溝通的均視作侵權(quán)。 寫在前面: 為什么選擇開發(fā)過程中的 CI 4 作為源碼解讀版本:(1)首先我選 CI 是因為它之前的穩(wěn)定版都是相對比較輕量小巧的,而且可以認為是簡單的。(2)為什么沒有選...

    MSchumi 評論0 收藏0
  • Codeigniter 4.0-dev 版源碼學習筆記之四——詳細路由過程

    摘要:行,判斷如果為空,那么返回默認路由。行,把處理完畢后找到的返回。方法該方法是自動按著約定規(guī)則去目錄去找路由的過程。此文可以轉(zhuǎn)載,但轉(zhuǎn)載前需要發(fā)郵件到進行溝通,未溝通的均視作侵權(quán)。 前言 我個人覺得在當前 MVC 流行的架構(gòu)下,要想去了解一個框架,或者是一個基于此架構(gòu)下的應用程序,最好的入手方式就是先看路由,雖然路由不是 MVC 里的任何一個,但是知道了路由的來龍去脈就知道了整個框架或者...

    NSFish 評論0 收藏0
  • Codeigniter 4.0-dev 版源碼學習筆記之五——相對于 3.x 的變化

    摘要:支持命名空間是沒有支持命名空間的。配置文件不再是簡單數(shù)組了新的配置文件是以對象組織的,各個配置以對象的屬性形式暴露出來。此文可以轉(zhuǎn)載,但轉(zhuǎn)載前需要發(fā)郵件到進行溝通,未溝通的均視作侵權(quán)。 前言 CI 為了追上大家的腳步,這次跨了一大步,盡量使用了更多的流行設計理念,甚至連 PHP 的支持版本都是從 7 開始起步的。我在之前閱讀源碼的同時也發(fā)現(xiàn)了很多變化的地方,在此把已經(jīng)發(fā)現(xiàn)的列舉出來,不...

    Youngdze 評論0 收藏0
  • CI Weekly #4 | 不同規(guī)模的團隊,如何做好持續(xù)集成?

    摘要:王者榮耀項目組高級測試工程師工程師文化團隊中的實踐本文不是一篇入門教程,而是從結(jié)合實際場景,闡述在團隊協(xié)作中如何去好好地應用。 CI Weekly 圍繞『 軟件工程效率提升』 進行一系列技術(shù)內(nèi)容分享,包括國內(nèi)外持續(xù)集成、持續(xù)交付,持續(xù)部署、自動化測試、 DevOps 等實踐教程、工具與資源,以及一些工程師文化相關(guān)的程序員 Tips 。同步于 flow.ci Blog、微信公眾號、官方微...

    jeffrey_up 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<