1. 擴展控制器
CI的控制器默認繼承自CI_Controller
,如果要擴展控制器,需要定義一個從CI_Controller
派生的控制器,所有的自定義控制器都繼承這個新控制器。
在application/core目錄下,有與system目錄下類似的目錄結構,比如core、helpers、language、libraries目錄,擴展控制器就是在application/core目錄下自定義控制器,該控制器類從CI_Controller繼承,類似的,如果要擴展系統(tǒng)的功能,就在application下的對應目錄新增自定義類,從系統(tǒng)類繼承。
[code]<?php
class My_Controller extends CI_Controller
{
function __construct()
{
parent::__construct();
echo "自定義控制器";
// 權限驗證...
// 登錄驗證...
}
}
?>
之后,將所有添加的控制器都從MY_Controller
派生,通過在MY_Controller
中重寫父類方法來實現(xiàn)擴展控制器。
在application/config/config.php文件中,有這樣一個配置項
[code]$config['subclass_prefix'] = 'MY_';
CI在查找擴展類,會根據這里的前綴去查找并包含定義類文件,此處前綴不區(qū)分大小寫
2. CI中的URL
當PHP程序部署在服務器上時,用戶會將程序安裝到指定目錄,程序員無法預先知道用戶會安裝到哪個目錄,因此對于代碼中出現(xiàn)的URL不能寫死,需要通過URL輔助函數(shù)動態(tài)獲取,在使用函數(shù)前需要先加載URL輔助函數(shù)庫($this->load->helper('url'))
或配置/application/config/autoload.php自動加載。
site_url()
:返回以config.php中指定的base_url
和index.php,還有傳遞給函數(shù)的URL段參數(shù)拼接成的字符串
[code]<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form action=<?php echo site_url('user/index4'); ?> method="post">
name:<input type="text" name="name" /><br />
password:<input type="text" name="password"><br />
<input type="submit" name="submit" value="submit" />
</form>
</body>
</html>
base_url():返回項目的基礎目錄
[code]<img src="<?php echo base_url(); ?>upload/qe.jpg">
current_url():返回當前查看頁面的完整URL
3.CI中的路由
路由用于配置針對某些URL與項目中實際文件的對應關系,是的URL看起來更符合用戶的習慣,又不用改變項目現(xiàn)有的結構,路由的配置文件是/application/config/routes.php,可以設置默認控制器和404錯誤頁面
[code]$route['default_controller'] = 'welcome'; $route['404_override'] = '';
更重要的功能是,如果我們要實現(xiàn)通過/index.php/news/4.html訪問/index.php/article/show/1這樣一個需求,可以在routes.php定義路由關系,將原始的URL轉換成需要樣式
[code]$route['news/([\d]+)\.html] = 'article/show/$1';
這樣對于所有負責正則表達式的URL,都會路由到新的路徑,其中$1
表示正則表達式中的第一個
用()括起來的部分
4.CI中的分頁
首先加載分頁類
[code]$this->load->library('pagination');
然后設置分頁屬性
[code]// 每頁顯示的數(shù)量
$config['page_size'] = 10;
// 總數(shù)據量
$config['total_rows'] = 200;
// 設置分頁跳轉頁面的基礎地址
$config['base_url'] = site_url('index.php/user/test');
// 設置分頁顯示文字
$config['first_link'] = '首頁';
$config['next_link'] = '下一頁';
$config['prev_link'] = '上一頁';
$config['last_link'] = '末頁';
初始化分頁類
[code]$this->pagination->initialize($config);
創(chuàng)建鏈接并傳遞給視圖
[code]$data['links'] = $this->pagination->create_links(); $this->load->view('test', $data);
通過URL獲取偏移量拼裝查詢
[code]$offset = (int)$this->load->uri->segment(3); $sql = "SELECT * FROM blog_user limit $offset, $page_size";
5.CI中的文件上傳
首先通過控制器的方法跳轉至視圖
[code]public function file() { $this->load->helper('url'); $this->load->view('file'); }
在視圖中創(chuàng)建一個表單用于選擇并上傳文件
[code]<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form action="<?php echo site_url('index.php/user/upload'); ?>" method="post" enctype="multipart/form-data">
<input type="file" name="pic" />
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>
其中,要注意第一個input的name屬性,這個屬性后面要用,在表單中將action設置為一個控制器方法,編寫對應的控制器方法
[code]
public function upload()
{
// 上傳文件到服務器目錄
$config['upload_path'] = './upload';
// 允許上傳哪些類型
$config['allowed_types'] = 'gif|png|jpg|jpeg';
// 上傳后的文件名,用uniqid()保證文件名唯一
$config['file_name'] = uniqid();
// 加載上傳庫
$this->load->library('upload', $config);
// 上傳文件,這里的pic是視圖中file控件的name屬性
$result = $this->upload->do_upload('pic');
// 如果上傳成功,獲取上傳文件的信息
if ($result)
{
var_dump($this->upload->data());
}
}
這樣就完成文件上傳了
6.CI中的Session
CI默認沒有啟動Session,而是用Cookie代替Session,首先Cookie只能保存4KB的數(shù)據,其次,在Session中保存數(shù)據馬上就可以獲取到,而Cookie中的數(shù)據要等到下次客戶端請求時才能獲取到。
首先加載Session類
[code]$this->load->library('session');
然后通過set_userdata方法以鍵值對或關聯(lián)數(shù)組的方式保存數(shù)據
[code]$user = array('id' => 3, 'name'=>'dj'); $this->session->set_userdata('user', $user);
用userdata方法獲取數(shù)據
[code]$user = $this->session->userdata('user');
用unset_userdata方法刪除數(shù)據
[code]$this->session->unset_userdata('user');
如果要保存的數(shù)據只需要用一次,可以使用閃出數(shù)據,這種數(shù)據只對下次服務器請求可用,然后會自動清除,閃出數(shù)據用set_flashdata()方法設置
[code]$this->session->set_flashdata('user', $user);
7.CI中的驗證碼
首先需要在入口文件的同級目錄文件夾用于保存驗證碼圖片,比如新建captcha目錄
加載captcha輔助類
[code]$this->load->helper('captcha');
調用create_captcha函數(shù)生成驗證碼圖片
[code]$this->load->helper('url');
$vals = array
(
// 驗證碼文字,默認是8位隨機字符串
'word' => 'Random word',
// 圖片保存路徑
'img_path' => './captcha/',
// 基礎目錄URL
'img_url' => base_url() . './captcha',
// 圖片中的字體使用的字體文件
'font_path' => './path/to/fonts/texb.ttf',
// 圖片大小
'img_width' => '150',
'img_height' => 30,
// 指定了驗證碼圖片的超時刪除時間(秒),默認2小時
'expiration' => 30 );
$cap = create_captcha($vals);
此外,還可以設置字符串長度、顏色、字體大小、可選字符,返回值包括了生成圖片的名稱、完整的img標簽、驗證碼字符串
由于CI不是PHP的session,因此對于驗證碼的驗證過程可以直接使用PHP的session進行保存
[code]session_start(); $_SESSION['cap'] = $cap['word'];
然后使用用戶的輸入與session中的值進行比較就可以了
?以上就是CodeIgniter學習筆記 Item6--CI中的常規(guī)主題的內容,更多相關內容請關注PHP中文網(www.miracleart.cn)!