Визуализация шаблона с определенным кодом статуса

Поскольку я читал, что Chrome испытывает проблемы с зацикливанием видео HTML5, если код ответа не равен 206, я хотел бы отобразить свой шаблон с кодом 206.

Пока я нигде не нашел, как указать HTML-код при рендеринге шаблона … Кто-нибудь уже пробовал это и преуспел?

9

Решение

В контроллере вы можете создать и вернуть объект Response с содержимым и указанным кодом возврата, например:

return new Response(
$this->renderView('AcmeDemoBundle:Default:video.html.twig', array(
'param1'    => $param1,
'param2'     => $param2,
)),
206  // return code
);

Надеюсь это поможет

6

Другие решения

Вы можете передать объект ответа с вашим renderResponse, который имеет необходимый код состояния.

$response = new Response('', 206);

return $this->renderResponse(
// Or return $this->container->get('templating')
'AcmeBundle:Video:show.html.twig',
array('video' => video),
$response
);

Если вы не проходите в Response с вашим renderResponse будет создан автоматически. Если вы передадите один, то его содержимое будет просто установлено на отображаемый шаблон (как вы можете видеть в код)

6

Я думаю, что вы в этом, прежде чем вы делаете шаблон, вы получите желаемый результат:

$this->getContext()->getResponse()->setStatusCode(206);

Кстати.
Класс Symfony\Component\HttpFoundation\Response предоставляет константы для всех допустимых HTTP-состояний

1

Новая реализация

protected function renderError(array $parameters, $statusCode = 500)
{
return $this->render(
'default/error.html.twig',
$parameters,
new Response('', $statusCode)
);
}
1