ZF2擁有專門用於此目的的acceptable view model selector控制器插件。它將根據您定義的映射通過查看客戶端發送的Accepts頭來選擇適當的ViewModel。
對於你的榜樣,您首先需要將其添加到您的視圖管理器配置(通常在module.config.php
),以確保JSON視圖策略:
'view_manager' => array(
'strategies' => array(
'ViewJsonStrategy'
)
),
(很可能你已經有一個view_manager關鍵還有,在這種情況下,「戰略」的一部分添加到您當前的配置)
然後在您的控制器調用控制器插件,使用映射作爲參數:
class IndexController extends AbstractActionController
{
protected $acceptMapping = array(
'Zend\View\Model\ViewModel' => array(
'text/html'
),
'Zend\View\Model\JsonModel' => array(
'application/json'
)
);
public function indexAction()
{
$viewModel = $this->acceptableViewModelSelector($this->acceptMapping);
return $viewModel;
}
}
這將爲標準請求返回一個正常的ViewModel,併爲接受JSON響應的請求返回一個JsonModel。 AJAX請求)。
您分配給JsonModel的任何變量都將顯示在JSON輸出中。
這是一個獨特的方法,但你可以做有條件的工作,你可以嘗試使用JSon模型和Viewmodel有條件地這是我唯一想到的,但這可能是一個壞的方法,但同比可以嘗試它 –
聽起來像是一個很常見的用例。 –