日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php ci 参数,CI如何写一个控制器,并传递参数正常解析访问?

發布時間:2025/3/20 php 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php ci 参数,CI如何写一个控制器,并传递参数正常解析访问? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

控制器

控制器是你整個應用的核心,因為它們決定了 HTTP 請求將被如何處理。

什么是控制器?

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

考慮下面的 URI:

example.com/index.php/blog/

上例中,CodeIgniter 將會嘗試查詢一個名為 Blog.php 的控制器并加載它。

當控制器的名稱和 URI 的第一段匹配上時,它將會被加載。

讓我們試試看:Hello World!

接下來你會看到如何創建一個簡單的控制器,打開你的文本編輯器,新建一個文件 Blog.php , 然后放入以下代碼:

然后將文件保存到 application/controllers/ 目錄下。

重要

文件名必須是大寫字母開頭,如:'Blog.php' 。

現在使用類似下面的 URL 來訪問你的站點:

example.com/index.php/blog/

如果一切正常,你將看到:

Hello World!

重要

類名必須以大寫字母開頭。

這是有效的:

這是無效的:

另外,一定要確保你的控制器繼承了父控制器類,這樣它才能使用父類的方法。

方法

上例中,方法名為 index() 。"index" 方法總是在 URI 的 第二段 為空時被調用。 另一種顯示 "Hello World" 消息的方法是:

example.com/index.php/blog/index/

URI 中的第二段用于決定調用控制器中的哪個方法。

讓我們試一下,向你的控制器添加一個新的方法:

現在,通過下面的 URL 來調用 comments 方法:

example.com/index.php/blog/comments/

你應該能看到你的新消息了。

通過 URI 分段向你的方法傳遞參數

如果你的 URI 多于兩個段,多余的段將作為參數傳遞到你的方法中。

例如,假設你的 URI 是這樣:

example.com/index.php/products/shoes/sandals/123

你的方法將會收到第三段和第四段兩個參數("sandals" 和 "123"):

重要

如果你使用了 URI 路由 ,傳遞到你的方法的參數將是路由后的參數。

定義默認控制器

CodeIgniter 可以設置一個默認的控制器,當 URI 沒有分段參數時加載,例如當用戶直接訪問你網站的首頁時。 打開 application/config/routes.php 文件,通過下面的參數指定一個默認的控制器:

$route['default_controller']='blog';

其中,“Blog”是你想加載的控制器類名,如果你現在通過不帶任何參數的 index.php 訪問你的站點,你將看到你的“Hello World”消息。

For more information, please refer to the "Reserved Routes" section of the URI 路由 documentation.

重映射方法

正如上文所說,URI 的第二段通常決定控制器的哪個方法被調用。CodeIgniter 允許你使用 _remap() 方法來重寫該規則:

publicfunction_remap(){// Some code here...}

重要

如果你的控制包含一個 _remap() 方法,那么無論 URI 中包含什么參數時都會調用該方法。 它允許你定義你自己的路由規則,重寫默認的使用 URI 中的分段來決定調用哪個方法這種行為。

被重寫的方法(通常是 URI 的第二段)將被作為參數傳遞到 _remap() 方法:

publicfunction_remap($method){if($method==='some_method'){$this->$method();}else{$this->default_method();}}

方法名之后的所有其他段將作為 _remap() 方法的第二個參數,它是可選的。這個參數可以使用 PHP 的 call_user_func_array() 函數來模擬 CodeIgniter 的默認行為。

例如:

publicfunction_remap($method,$params=array()){$method='process_'.$method;if(method_exists($this,$method)){returncall_user_func_array(array($this,$method),$params);}show_404();}

處理輸出

CodeIgniter 有一個輸出類,它可以自動的將最終數據發送到你的瀏覽器。 更多信息可以閱讀 視圖 和 輸出類 頁面。但是,有時候, 你可能希望對最終的數據進行某種方式的后處理,然后你自己手工發送到瀏覽器。CodeIgniter 允許你向你的控制器中添加一個 _output() 方法,該方法可以接受最終的輸出數據。

重要

如果你的控制器含有一個 _output() 方法,輸出類將會調用該方法來顯示數據, 而不是直接顯示數據。該方法的第一個參數包含了最終輸出的數據。

這里是個例子:

publicfunction_output($output){echo$output;}

注解

請注意,當數據傳到 _output() 方法時,數據已經是最終狀態。這時基準測試和計算內存占用都已經完成, 緩存文件也已經寫到文件(如果你開啟緩存的話),HTTP 頭也已經發送(如果用到了該 特性)。 為了使你的控制器能正確處理緩存,_output() 可以這樣寫:

if($this->output->cache_expiration>0){$this->output->_write_cache($output);}

如果你在使用 _output() 時,希望獲取頁面執行時間和內存占用情況,結果可能會不準確, 因為并沒有統計你后加的處理代碼。另一個可選的方法是在所有最終輸出 之前 來進行處理, 請參閱 輸出類 。

私有方法

有時候你可能希望某些方法不能被公開訪問,要實現這點,只要簡單的將方法聲明為 private 或 protected , 這樣這個方法就不能被 URL 訪問到了。例如,如果你有一個下面這個方法:

privatefunction_utility(){// some code}

使用下面的 URL 嘗試訪問它,你會發現是無法訪問的:

example.com/index.php/blog/_utility/

注解

為了向后兼容原有的功能,在方法名前加上一個下劃線前綴也可以讓該方法無法訪問。

將控制器放入子目錄中

如果你正在構建一個比較大的應用,那么將控制器放到子目錄下進行組織可能會方便一點。CodeIgniter 也可以實現這一點。

你只需要簡單的在 application/controllers/ 目錄下創建新的目錄,并將控制器文件放到子目錄下。

注解

當使用該功能時,URI 的第一段必須指定目錄,例如,假設你在如下位置有一個控制器:

application/controllers/products/Shoes.php

為了調用該控制器,你的 URI 應該像下面這樣:

example.com/index.php/products/shoes/show/123

Each of your sub-directories may contain a default controller which will be called if the URL contains only the sub-directory. Simply put a controller in there that matches the name of your 'default_controller' as specified in your application/config/routes.php file.

你也可以使用 CodeIgniter 的 URI 路由 功能來重定向 URI。

構造函數

如果你打算在你的控制器中使用構造函數,你 必須 將下面這行代碼放在里面:

parent::__construct();

原因是你的構造函數將會覆蓋父類的構造函數,所以我們要手工的調用它。

例如:

如果你需要在你的類被初始化時設置一些默認值,或者進行一些默認處理,構造函數將很有用。 構造函數沒有返回值,但是可以執行一些默認操作。

保留方法名

因為你的控制器將繼承主程序的控制器,在新建方法時你必須要小心不要使用和父類一樣的方法名, 要不然你的方法將覆蓋它們,參見 保留名稱 。

重要

另外,你也絕對不要新建一個和類名稱一樣的方法。如果你這樣做了,而且你的控制器 又沒有一個 __construct() 構造函數,那么這個和類名同名的方法 Index::index() 將會作為類的構造函數被執行!這個是 PHP4 的向前兼容的一個特性。

就這樣了!

OK,總的來說,這就是關于控制器的所有內容了。

CI中國

總結

以上是生活随笔為你收集整理的php ci 参数,CI如何写一个控制器,并传递参数正常解析访问?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。