2010年8月11日

PHP網站快速開發筆記 - 使用Codeigniter (一)

一、使用友善網址

預設情況下,Codeigniter的網址長這樣:
example.com/index.php/news/article/my_article

設定友善網址之後,就變成這樣:
example.com/news/article/my_article

就是把多餘的index.php給拿掉了,Codeigniter本身提供快速簡潔的URL處理方式,設定步驟很簡單。

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


※ 必須將放置靜態檔案(例如css/js/img等)的資料夾名稱加入RewriteCond設定,否則一律都丟給index.php處理就麻煩了。

application/config/config.php
$config['index_page'] = "";

$config['base_url'] = "http://".$_SERVER['HTTP_HOST'];
$config['base_url'] .= preg_replace('@/+$@','',dirname($_SERVER['SCRIPT_NAME'])).'/';


※ index_page的設定值空白,在使用Codeigniter的URL Helper系列function時,就會產生友善網址(其實就是少了index.php字串的輸出)。


二、取得GET資料

既然使用Codeigniter,當然就不必再用$_GET的傳統PHP寫法去抓網址列參數,Codeigniter的Controller提供一個簡潔的參數處理機制。

傳統的PHP可能這樣寫:
example.com/index.php?module=blog&action=article&id=123&type=json

使用Codeigniter之後,要開始習慣這樣做:
example.com/blog/article/123/json

而對應的Controller則是這樣寫:
class Blog extends Controller {
function article($id, $type = 'xml') {
...

在Controller的method可以自訂多個參數,Codeigniter會將網址包含的參數資料取出,依參數的位置順序傳遞給method處理。

所以,複雜的資料,例如表單提交的一大串代碼,就不適合用GET的方式傳遞。事實上由於URL有長度、編碼限制,本來就不適合傳遞又大又雜的資料,複雜的資料必須以POST方式處理。


三、取得POST資料

假設有一表單資料 <input name="field1" ... /> 送出,則使用以下語法接收。

$form_field1 = $this->input->post('field1');

若要防止XSS(Cross Site Script)攻擊,可以指定第二個參數為true,藉由Codeigniter提供的XSS Filter過濾不安全的代碼。

$form_field1 = $this->input->post('field1', true);


※ 附錄今天製作的一個網站雛型畫面,使用Codeigniter + PEAR::Text_Wiki_Mediawiki 開發,只寫四個PHP程式就完成一個內建Wiki語法引擎的動態網頁,即2個Controller + 2個View。網站的動態內容以Wiki語法儲存成TXT純文字檔案,並提供線上管理者編輯功能,導覽列的選單也即時由TXT檔案解析產生。


※ Codeigniter: http://codeigniter.com/

1 則留言:

  1. 請問下CodeIgniter 的數字分頁該如何寫
    官方的 use_page_numbers 似乎好像怪怪的

    回覆刪除

lyhcode by lyhcode
歡迎轉載,請務必註明出處!