Zend Framework - 控制器



如前所述,**控制器**在 Zend MVC 框架中扮演著重要的角色。應用程式中的所有網頁都需要由控制器來處理。

在 Zend MVC 框架中,控制器是實現 – Zend/Stdlib/DispatchableInterface 的物件。**DispatchableInterface** 只有一個方法,**dispatch**,它以**請求**物件作為輸入,執行一些邏輯並返回**響應**物件作為輸出。

dispatch(Request $request, Response $response = null) 

以下是一個返回“Hello World”的控制器物件的簡單示例:

use Zend\Stdlib\DispatchableInterface; 
use Zend\Stdlib\RequestInterface as Request; 
use Zend\Stdlib\ResponseInterface as Response;  
class HelloWorld implements DispatchableInterface { 
   public function dispatch(Request $request, Response $response = null) { 
      $response->setContent("Hello World!"); 
   } 
}

**DispatchableInterface** 是基礎的,它需要很多其他的介面來編寫高階控制器。一些這樣的介面如下:

  • **InjectApplicationEventInterface** - 用於注入事件(Zend 事件管理器)

  • **ServiceLocatorAwareInterface** - 用於定位服務(Zend 服務管理器)

  • **EventManagerAwareInterface** - 用於管理事件(Zend 事件管理器)

牢記這些,Zend Framework 提供了許多實現這些介面的現成控制器。最重要的控制器如下所述。

AbstractActionController

AbstractActionController(Zend/Mvc/Controller/AbstractActionController)是 Zend MVC 框架中最常用的控制器。它具有編寫典型網頁所需的所有必要功能。它允許路由(路由是將請求 URL 與控制器及其方法之一匹配)匹配一個**操作**。匹配後,控制器將呼叫以操作命名的某個方法。

例如,如果路由**test**匹配,並且路由**test**為操作返回**hello**,則將呼叫**helloAction**方法。

讓我們使用**AbstractActionController**編寫我們的**TutorialController**。

  • 透過擴充套件**AbstractActionController**建立一個名為**TutorialController**的新 PHP 類,並將其放置在**module/Tutorial/src/Controller/**目錄中。

  • 將**Tutorial\Controller**設定為名稱空間。

  • 編寫一個**indexAction**方法。

  • 從**indexAction**方法返回**ViewModel**物件。**ViewModel**物件用於將資料從控制器傳送到檢視引擎,我們將在後續章節中看到。

完整的程式碼清單如下:

?php  
namespace Tutorial\Controller;  
use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel;  
class TutorialController extends AbstractActionController { 
   public function indexAction() { 
      return new ViewModel(); 
   } 
}

我們已成功添加了新的**TutorialController**。

AbstractRestfulController

AbstractRestfulController(Zend\Mvc\Controller\AbstractRestfulController)檢查傳入請求的 HTTP**方法**,並透過考慮 HTTP 方法來匹配操作(方法)。

例如,使用 GET HTTP 方法的請求要麼匹配**getList()**方法,要麼匹配**get()**方法(如果在請求中找到**id**引數)。

AbstractConsoleController

AbstractConsoleController(Zend\Mvc\Controller\AbstractConsoleController)類似於 AbstractActionController,但它只在控制檯環境中執行,而不是在瀏覽器中執行。

廣告