Thinkphp學習——控制器_控制器定義

來源:互聯網
上載者:User

標籤:action   快捷   情況   首字母   命名   參考   code   min   影響   

一般來說,ThinkPHP的控制器是一個類,而操作則是控制器類的一個公用方法

下面就是一個典型的控制器類的定義:

<?phpnamespace Home\Controller;use Think\Controller;class IndexController extends Controller {    public function hello(){        echo ‘hello,thinkphp!‘;    }}

Home\IndexController類就代表了Home模組下的Index控制器,而hello操作就是Home\IndexController類的hello(公用)方法。

當訪問 http://serverName/index.php/Home/Index/hello 後會輸出:

hello,thinkphp!

注意:如果你設定了操作方法綁定到類,則操作方法對應了一個類(參考操作綁定到類)。

定義控制器

控制器通常需要繼承系統的Controller類或者其子類,例如,下面定義了一個 \Home\Controller\IndexController 控制器類:

<?phpnamespace Home\Controller;use Think\Controller;class IndexController extends Controller {    public function hello(){        echo ‘hello‘;    }    public function test(){        echo ‘test‘;    }}

控制器的名稱採用駝峰法命名(首字母大寫),控制器檔案位於 Home/Controller/IndexController.class.php

IndexController控制器類的hello和test方法就是操作方法,訪問下面的URL地址:

http://serverName/Home/Index/hellohttp://serverName/Home/Index/test

會分別輸出:

hello// 和test

操作方法的定義必須是公用方法,否則會報操作錯誤,所以,下面的操作定義只能訪問hello操作,而不能訪問test操作。

<?phpnamespace Home\Controller;use Think\Controller;class IndexController extends Controller {    public function hello(){        echo ‘hello‘;    }    protected function test(){        echo ‘test‘;    }}

因為操作方法就是控制器的一個方法,所以遇到有和系統的關鍵字衝突的方法可能就不能定義了,這個時候我們可以設定作業方法的尾碼來解決,例如:

‘ACTION_SUFFIX‘         =>  ‘Action‘, // 操作方法尾碼

設定作業方法的尾碼為Action,這樣,控制器的操作方法定義調整為:

<?phpnamespace Home\Controller;use Think\Controller;class IndexController extends Controller {    public function listAction(){        echo ‘list‘;    }    public function helloAction(){        echo ‘hello‘;    }    public function testAction(){        echo ‘test‘;    }}

操作方法的尾碼設定只是影響控制器類的定義,對URL訪問沒有影響。

多層控制器

ThinkPHP的控制器支援多層和多級,多層指的是控制器可以分層,例如除了預設的Controller控制器層(我們可以稱之為存取控制器),還可以添加事件控制器(層),例如:

├─Controller 存取控制器│  ├─UserController.class.php │  ├─BlogController.class.php│  ...├─Event 事件控制器│  ├─UserEvent.class.php  │  ├─BlogEvent.class.php│  ...

存取控制器的名稱是通過DEFAULT_C_LAYER設定的,預設是Controller。

存取控制器負責外部互動響應,通過URL請求響應,例如 http://serverName/Home/User/index,而事件控制器負責內部的事件響應,並且只能在內部調用,所以是和外部隔離的。

多層控制器的劃分可以根據項目的需要自由分層。

如果是定義其他的控制器層,則不一定必須要繼承系統的Controller類或其子類,通常需要輸出模版的時候才需要繼承Controller類。例如:

<?phpnamespace Home\Event;class UserEvent {    public function login(){        echo ‘login event‘;    }    public function logout(){        echo ‘logout event‘;    }}

UserEvent事件控制器位於 Home/Event/UserEvent.class.php 。

多級控制器

多級控制器是指控制器可以通過子目錄把某個控制器層分組存放,首先需要設定控制器的分級層次,例如,我們設定2級目錄的控制器層:

‘CONTROLLER_LEVEL‘      =>  2,

控制器檔案的位置放置如下:

├─Controller 存取控制器│  ├─User User分級(組)│  │  ├─UserTypeController.class.php │  │  ├─UserAuthController.class.php │  ...│  ├─Admin Admin分級(組)│  │  ├─UserController.class.php │  │  ├─ConfigController.class.php │  ...

多級控制器中的命名空間需要這樣定義:

<?phpnamespace Home\Controller\Admin;use Think\Controller;class IndexController extends Controller {    public function hello(){        echo ‘hello‘;    }    public function test(){        echo ‘test‘;    }}

然後就可以通過URL地址訪問:

http://serverName/Home/User/UserTypehttp://serverName/Home/Admin/User

如果希望簡化URL地址中的模組地址,可以參考 模組部署

執行個體化控制器

存取控制器的執行個體化通常是自動完成的,系統會根據URL位址解析出訪問的控制器名稱自動執行個體化,並且調用相關的操作方法。

如果你需要跨控制器調用的話,則可以單獨執行個體化:

// 執行個體化Home模組的User控制器$User = new \Home\Controller\UserController();// 執行個體化Admin模組的Blog控制器$Blog = new \Admin\Controller\BlogController();

系統為上面的控制器執行個體化提供了一個快捷調用方法A,上面的代碼可以簡化為:

// 假設當前模組是Home模組$User = A(‘User‘); $Blog = A(‘Admin/Blog‘);

預設情況下,A方法執行個體化的是預設控制器層(Controller),如果你要執行個體化其他的分層控制器的話,可以使用:

// 假設當前模組是Home模組// 執行個體化Event控制器$User = A(‘User‘,‘Event‘); $Blog = A(‘Admin/Blog‘,‘Event‘);

上面的代碼等效於:

// 執行個體化Home模組的User事件控制器$User = new \Home\Event\UserEvent();// 執行個體化Admin模組的Blog事件控制器$Blog = new \Admin\Event\BlogEvent();

 

Thinkphp學習——控制器_控制器定義

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.