php框架學習CI(CodeIgniter)的經驗分享

首先我們必須知道CodeIgniter是什麼?

CodeIgniter是一個應用程序框架,是一個爲用PHP編寫網絡應用程序提供的工具包

CodeIgniter使用嚴格的M-V-C模型,這樣可以更好地使表現層和邏輯層分離。


CodeIgniter生成乾淨的URL 

CodeIgniter URL 在默認情況下,CodeIgniter中的URL被設計成對搜索引擎和人類友好,不同於使用標準“查詢字符串”方法的是,CodeIgniter使用基於段的方法:

example.com/news/article/my_article

 

example.com/class/function/ID

第一段表示的控制器類

第二段表示調用類中的函數或者方法

第三以及更多的字段表示的是傳遞給控制器的參數,如ID或者其他各種變量。

 

刪除index.php文件

默認情況下,index.php 文件將被包含在你的URL種:

example.com/index.php/class/function/ID

可以通過.htaccess文件來設置一些簡單的規則來刪除它,使用“negative”方法將非指定內容進行重定向:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

 

什麼是控制器

簡而言之,一個控制器就是一個類文件,是以一種能夠和URL關聯在一起的方式來命名的。

example.com/index.php/blog/

這個例子中CodeIgniter加載是一個名爲blog.php 的控制器。

<?php

         Class Blog extends CI_Controller{

         Function__construct(){

         Parent::__construct();

}

Function index(){

         Echo“Hello world”;

}

}

?>

把以上代碼寫到blog.php中,放入application/controllers/文件夾下,現在使用類似這樣的URL訪問你的站點

Example.com/index.php/blog/ 你就會看到Helloworld

注意:類名首字母必須大寫

上例中用到的方法名是index()。如果URL的第二部分爲空的話,會默認載入”index”方法,也可以將地址寫成這樣來訪問。

 

定義默認控制器

當你的網站沒有設置URI或者直接從更目錄訪問的時候,Codeigniter會加載默認的控制器,打開application/config/routes.php 文件來設置默認控制器

$router[‘default_controller’]=’Blog’;

 

 

視圖

首先創建一個視圖,在application/views/文件夾下建立一個blogview.php的文件。

<html>

<head>

<title>My Blog</title>

</head>

<body>

<h1>Welcome to my blog</h1>

</body>

</html>

 

然後是加載視圖

blog.php控制器中的方法中用一下方法進行加載視圖

$this->load->view(‘blogview’);

可以加載多個視圖,並且可以傳遞一些動態數據

例如一下代碼,在blog.php控制器中

function show() {

           $data['title']="My Real Title";

           $data['heading']="My Real Heading";

           $this->load->view('blogview',$data);

       }

view中就可以這樣去使用

<html>

<head>

<title><?php echo$title;?></title>

</head>

<body>

<h1><?php echo$heading?></h1>

</body>

</html>

循環輸出數據大代碼:

<ul>

<?php foreach($todo_list as $item):?>

<li><?php echo$item;?></li>

<?php endforeach;?>

</ul>

 

什麼是模型?

模型是專門用來和數據庫打交道的php類,例如,假設想做一個Blog,你可以寫一個模型類,裏面包含插入、更新、刪除blog數據的方法。

下面寫一個簡單的例子

 

在數據庫中建立一個表,表名位user

 

字段

備註

Id

編號,主鍵自動增長

Username

姓名 varchar

Phone

電話 varchar

 

models中建立一個名字爲user.php的模型類。下面是具體代碼

<?php

         Class User extends CI_Model{

                   Function__construct(){

                            Parent::__construct();

}

}

?>

注意model類必須繼承超級modelCI_Model

 

下面是數據庫的配置:在application/config/database.php下修改代碼如下

$db['default']['hostname'] = 'localhost';

$db['default']['username'] = 'root';

$db['default']['password'] = '******';

$db['default']['database'] = 'dbname';

$db['default']['dbdriver'] = 'mysql';

$db['default']['dbprefix'] = '';

$db['default']['pconnect'] = TRUE;

$db['default']['db_debug'] = TRUE;

 

在控制器中加載這個配置以及model類,在controllers下定義控制器類user.php

<?php

         ClassUser extends CI_Controller{

         Function __construct(){

                   Parent::__construct();

}

Function add(){

         $this->load->database();//加載數據庫配置

         $this->load->model(‘user’);//加載模型類,其實就是再製定要對哪個表進行操作

         $data = array(‘username’=>’zhangsan’,’phone’=>’123456789’);

         $this->db->insert(‘user’,$data);//快速插入數據的操作

}

}

?>

輔助函數是幫助我們完成特定任務的函數,每個輔助函數文件僅僅是一些函數的集合。CodeIgniter默認沒有載入輔助函數文件。所以如果想使用輔助函數,就必須先載入它,一旦載入,輔助函數將全局可用,可以在controllerviews中使用它們,輔助函數文件,一般保存在system/helpers或者application/helpers文件夾中,CodeIgniter將會先在application/helpers下尋找對應的輔助函數文件,如果該目錄不存在或者目錄下沒有對應的輔助函數文件,CI纔會載入system/helpers下的輔助函數文件。

 

載入輔助函數,$this->load->helper(‘name’);例如要載入文件名爲url_helper.php,載入形式如下

$this->load->helper(‘url’);

一次可以載入多個輔助函數,參數要用數組形式

$this->load->helper(array(‘helper1’,’helper2’,……));

 

使用CodeIgniter類庫

所有的類庫文件存放在system/libraries文件夾。大多數情況下你需要預先在controller中初始化後才能使用它們。

$this->load->library(‘class_name’);

加載類庫時,一次也可以加載多個類庫。

注意:程序員還可以自定義自己的類庫

 

使用CodeIgniter適配器,適配器是一種特殊的庫,它有一個父類和任意數量的子類,子類可以訪問其父類元素,但不能訪問其兄弟類的元素,在你的控制器中,適配器爲類庫提供了一種優雅的語法,一次類庫會就此獲益甚至會需要分解成離散的類。

適配器的源文件放在system/library目錄下。

 

基準測試類

CodeIgniter有一個總是有效的基準測試類,能夠用來計算兩個標記點的時間差。

測試基準類可以在控制器,視圖或者模型中使用,用法如下:

標記一個開始點

標記一個結束點

運行elapsed_time函數顯示結果

$this->benchmark->mark('code_start');
// Some code happens here
$this->benchmark->mark('code_end');
echo $this->benchmark->elapsed_time('code_start', 'code_end');

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章