本節包含以下方面的內容
控制器(Control)是html' target='_blank'>應用程序中最關鍵的部分之一,它決定了如何處理傳遞進來的請求(Request),以及生成相應的響應(Response)。
大部分的控制器都會處理一個Http的請求,然后返回Html或者Json或者Xml格式的數據作為響應。
1、基本概念
控制器文件一般在應用程序的controllers目錄下面,文件命名規則為XXXController.php,其中XXX可以為任意的名稱,后面的Controller是固定格式,不能少一個單詞。
一個基本的控制器的定義要從yiiwebController繼承,如
namespace appcontrollers;use yiiwebController;class SiteController extends Controller{ public function actionIndex() { // will render view from 'views/site/index.php' return $this->render('index'); } public function actionTest() { // will just print 'test' to the browser return 'test'; }}
一般來說控制器里面定義的動作都是actionSomething格式的公共的方法。輸出的數據可以是一個字符串或者yiiwebResponse的實例。
動作輸出的結果將會由 response組件處理并轉換成不同的數據格式如JSON等。默認情況下是沒有對動作的執行結果進行處理的。
2、路由
每個控制器里面的動作都有一個相對應的路由,在上面的例子中actionIndex有一個對應的site/index路由,actionTest對應的路由是site/test。在這個路由中site為控制器的id,test為動作的id。
一般情況下可以通過這個格式的URL來訪問控制器和動作。http://example.com/?r=controller/action。當然你可以完全自定義url的格式(URL Management.)。
如果控制器是在一個模塊里面,那么對應的路由格式為module/controller/action。
控制器還可以存在于應用程序或者模塊的控制器目錄下面的子目錄里。這種路由的格式前面就需要加上相應的目錄名稱。例如在controllers/admin下面有個UserController,那么動作actionIndex相應的路由為admin/user/index。admin/user為控制器的Id.
如果模塊或者控制器或者動作都沒有找到,Yii將會返回一個'not found' 頁面,并且返回的Http代碼為404。
注意:
如果模塊名稱或者控制器名稱或者動作名稱是用的駱駝格式的命名寫法,那么路由里面的每個大寫單詞之間都要用“-”來連接。如
DateTimeController::actionFastForward相應的路由為date-time/fast-forward。
1、默認路由
如果一個URl沒有指定路由,如http://www.yiifans.com,那么Yii將會使用默認的路由。
Yii在應用程序里面定義了默認的路由。默認的路由為site由yiiwebApplication:: $defaultRoute定義,即控制器SiteController將會被使用。
有默認的路由也就會有默認的動作了。每個控制器都有一個默認的動作。如果在URL中沒有指定動作的話,那么將會調用默認的動作。
默認的動作名為index,在yiiaseController:: $defaultAction中定義。
如http://www.yiifans.com/?r=site,只指定了路由為site,那么將會使用默認的動作index,即將會調用SiteController里面的actionIndex方法
3、動作參數
就像上面提到的一樣,一個簡單的動作就是一個以actionXXX格式命名的公開的方法。那么動作如何從Http的請求中獲取想要的參數呢?
1、動作中定義參數
在定義動作的時候直接定義參數。這個參數的值會直接從$_GET里面獲取對應的值。也就是說動作里面定義的參數只能從$_GET里面獲取值。
namespace appcontrollers;use yiiwebController;class BlogController extends Controller{ public function actionView($id, $version = null) { $post = Post::findOne($id); $text = $post->text; if ($version) { $text = $post->getHistory($version); } return $this->render('view', [ 'post' => $post, 'text' => $text, ]); }}
如上所示動作view定義了兩個參數$id和$version。其中$version的默認值為null。
我們可以通過http://www.yiifans.com/?r=blog/view&id=42或者http://www.yiifans.com/?r=blog/view&id=42&version=3來訪問。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答