我開發RESTful應用程序和我想建立一個工廠,創建適當的ViewModel
(Zend\View\Model\ViewModel
,Zend\View\Model\JsonModel
,我的XmlModel
)對象依賴於HTTP請求報頭中的Accept
(例如-H 'Accept: application/json'
)參數。我想實現這個作爲回調:如何從Zend Framework 2中的ServiceManger獲取Request對象?
class Module implements ServiceProviderInterface
{
...
public function getServiceConfig() {
try {
return array (
'factories' => array(
'RestViewModel' => function($serviceManager) {
// Here I need the the Request object.
$requestHeadAccept = $requestObject->getHeaders()->get('Accept')->toString();
$return = null;
if (strpos($requestHeadAccept, 'application/json') != -1) {
$return = new JsonModel(array('data' => $data));
} elseif (strpos($requestHeadAccept, 'application/xml') != -1) {
...
} else {
...
}
return $return;
}
)
);
} catch (\Exception $e) {
...
}
}
...
}
我怎樣才能得到Request
對象在這個地方?
太好了!非常感謝您的回答!還有一個問題:關於「接受」值沒有預期的是什麼?我只是試着'應用程序/ foobar'出來,並得到了'的Zend \查看\型號\ ViewModel'對象和'的Zend \查看\異常\ RuntimeException'(在'/供應商/ ZF2 /庫/的Zend /查看拋出/渲染/ PhpRenderer.php:499')。如果HTTP請求頭包含不正確的「Access」值,應如何處理這些案例? – automatix
@automatix我認爲這是一個不同的問題,但這裏是:1)默認情況下,你會得到一個ViewModel,如果找不到合適的匹配的話。這是你想要的,對吧? 2)什麼是例外,爲什麼拋出?你能澄清嗎? –
@automatix我現在看到異常,它是關於無法找到的模板。如果你返回一個'ViewModel',那麼帶有phtml文件的渲染就會在響應中返回html。因此,返回視圖模型意味着您需要渲染一個模板。你可以改變行爲而不是返回一個標準的ViewModel,但是例如標準的你返回一個JSON模型。那是你需要的嗎? –