Я занимаюсь разработкой RESTful приложения, и я хочу, чтобы построить завод, который создает надлежащую ViewModel
(Zend\View\Model\ViewModel
, Zend\View\Model\JsonModel
, мой XmlModel
) объект, зависящий от (например -H 'Accept: application/json'
) параметра в заголовке запроса HTTP Accept
. Я хочу, чтобы реализовать это как обратный вызов:Как получить объект Request из ServiceManger в Zend Framework 2?
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
объект в этом месте?
Отлично! Большое спасибо за ваш ответ! Еще один вопрос: что можно сказать о ожидаемых значениях 'Accept'? Я просто попробовал «application/foobar» и получил объект «Zend \ View \ Model \ ViewModel» и «Zend \ View \ Exception \ RuntimeException» (брошенный в '/ vendor/ZF2/library/Zend/View/Renderer/PhpRenderer.php: 499'). Как следует обрабатывать случаи, когда заголовок HTTP-запроса содержит неправильное значение 'Access'? – automatix
@automatix Я думаю, что это другой вопрос, но здесь он гласит: 1) вы получаете ViewModel по умолчанию, если не найдено подходящего соответствия. Это то, что вы хотите, не так ли? И 2) Какое исключение и почему оно брошено? Вы можете уточнить? –
@automatix Теперь я вижу исключение, речь идет о шаблоне, который не может быть найден. Если вы вернете «ViewModel», то рендеринг с файлом phtml будет сделан для возврата html в ответ. Таким образом, возврат модели просмотра означает, что вам нужен шаблон для визуализации. Вы можете изменить поведение, чтобы не возвращать стандартный ViewModel, но, например, стандарт, вы возвращаете модель JSON. Это то, что вам нужно? –