一. 控制器操作
我們首先復習一下基本的控制器定義和方法執行方式。
第一步:控制器默認創建在當前模塊下的 Controller 目錄下;
第二步:按照指定的命名規則:控制器名(首字母大寫)+Controller.class.php;
第三步:控制器里的方法必須是 public 公共的;
1 //控制器 2 class UserController s extends Controller { 3 public n function index() { 4 //index()方法在URL訪問時可以忽略 5 } 6 }
URL 訪問: http://localhost/demo39/User/index/
有時方法名可能和關鍵字沖突,那么定義起來就比較麻煩
在 WeiBo/home/controller/IndexController.class.php 中如果方法名與ThinkPHP中的關鍵字重合,則會出錯,類似:
1 <?php 2 namespace Home\Controller; 3 use Think\Controller; 4 class IndexController extends Controller { 5 public function class() { 6 echo "this is class"; 7 } 8 }
報錯如下:

控制器提供了一個配置定義:
在 WeiBo/Conf/config.php 中進行配置:
1 //配置控制器方法后綴 2 'ACTION_SUFFIX'=>'Action',
每個方法后面加上Action,對于URL訪問不需要加Action
1 class IndexController extends Controller { 2 public function indexAction() { 3 echo 'index'; 4 } 5 public function classAction() { 6 echo 'test'; 7 } 8 }
這是在瀏覽器中輸入 http://localhost/demo39/index/class 則可以訪問,
注意,這是瀏覽器中的地址還是class,而不是classAction
默認情況下通過 URL 訪問的頁面是控制器模塊下的方法,即:Controller 目錄下的
UserController.class.php 類。它是對外公開可訪問的,我們可以稱為訪問控制器。那
么很多時候,由于項目業務的高度繁雜,我們可能想法很多業務分離到另外的層,比如事件
控制器層。那么可以這么操作:
第一步:創建事件控制器目錄:Event;(此時Event與Controller同級)
第二步:創建 UserEvent.class.php 類;
代碼如下:
1 <?php 2 namespace Home\Event; 3 4 class UserEvent { 5 public function test() { 6 echo '這是事件控制器層的封裝,不對外公開,屬于內部調用!'; 7 } 8 }
在 WeiBo/home/controller/IndexController.class.php 中調用是如下:
<?php namespace Home\Controller; use Think\Controller; use Home\Event\UserEvent; class indexController extends Controller { public function event() { $userEvent = new UserEvent(); $userEvent->test(); echo 'test'; } }
這時即可調用成功:

PS:這里調用別的控制器還可以使用快捷調用方法 A()。
1 $userEvent = A('User', 'Event'); 2 $userEvent = A('Admin/User', 'Event'); //在Admin下的user調用Event
代碼如下:
1 <?php 2 3 namespace Home\Controller; 4 use Think\Controller; 5 use Home\Event\UserEvent; 6 7 class IndexController extends Controller { 8 public function event() { 9 //$userEvent = new UserEvent(); 10 $userEvent = A('User','Event'); 11 $userEvent->test(); 12 echo "test"; 13 } 14 }
默認情況下,控制器只支持一級控制器。當項目較為繁雜的時候,想創建統一模塊下多
個控制器時,可以配置二級控制器。
第一步:配置允許二級控制器
在 WeiBo/Common/Conf/config.php 中寫入如下配置代碼:
1 //允許二級控制器 2 'CONTROLLER_LEVEL'=>2,
在 WeiBo/Home/Controller/ 下新建 Member 文件夾,然后在 Member 文件夾下新建 CommentController.class.php 文件,代碼如下:
1 <?php 2 namespace Home\Controller\Member; 3 use Think\Controller; 4 5 class CommentController extends Controller { 6 public function test() { 7 echo 'comment test'; 8 } 9 }
此時在瀏覽次地址出輸入 http://localhost/demo39/Member/Comment/test 即可得到:

但是此時如果加載與 Member 文件同級的 IndexController.class.php ,則會發生錯誤,

但如果在config文件中把
1 //允許二級控制器 2 'CONTROLLER_LEVEL'=>2,
去掉,則又可以重新訪問了。
ThinkPHP 控制器還提供了兩個特殊的方法,前置操作方法_before_index()和后置操
作方法_after_index()。這兩個方法,在控制器調用 index()方法的時候,一個在之前執
行,一個在之后執行。
在 WeiBo/Home/Controller/IndexController.class.php 中的代碼如下:
1 <?php 2 3 namespace Home\Controller; 4 use Think\Controller; 5 use Home\Event\UserEvent; 6 7 class IndexController extends Controller { 8 public function index() { 9 echo "this is index"."<br>"; 10 } 11 12 public function _before_index() { 13 echo "this is before index"."<br>"; 14 } 15 public function _after_index() { 16 echo "this is after index"."<br>"; 17 } 18 }
效果圖如下:

二.Action 參數綁定
參數綁定是通過直接綁定 URL 地址中的變量作為操作方法的參數,可以簡化方法的定
義甚至路由的解析。
在 WeiBo/Common/Conf/config.php 中配置如下:
1 //啟用Action參數綁定,默認為true,可以不寫 2 'URL_PARAMS_BIND'=> true,
默認的參數綁定是按變量名來綁定的,直接通過 URL 傳遞參數。
1 //變量名為$id 2 class IndexController extends Controller { 3 public function index($id) { 4 echo 'id:'.$id; 5 } 6 }
通過URL http://localhost/demo39/Index/index/id/5 訪問,得到:

PS:當你 URL 沒有傳遞參數(id/5)的時候,那么頁面會報錯:參數錯誤或者未定義:id。
當然,如果取消綁定,則不會報錯'URL_PARAMS_BIND'=> false,。但是,為了程序的
嚴謹性,一般需要不要取消參數綁定。
如果你個那個參數設定一個默認值,當沒有傳遞參數的時候,會直接啟用默認值:
1 //給變量$id 設置默認值 2 public function index($id=1)
還有一種是按順序傳遞參數,這個方法可以省略掉鍵值對中的鍵,也就是說 id 不需要
傳遞,只需要傳遞 5 這個值即可。但必須按照多個參數的順序。
在config.php中的配置如下:
1 //定義按順序傳參綁定 2 'URL_PARAMS_BIND_TYPE'=>1,
在 WeiBo/Home/Controller/IndexController.class.php 中的代碼如下:
//傳遞兩個參數 class IndexController extends Controller { public function index($id, $type) { echo 'id:'.$id.',type:'.$type; } }
此時URL http://localhost/demo39/User/index/5/a
得到結果如下:

文章列表
留言列表
