2015-03-05 2 views
9

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

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

+0

Я не знаю, почему это разные, но эта проблема решается сама, когда Я положил свое приложение в test/prod env. Внезапно видео зацикливается так, как должно. –

ответ

6

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

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

Надежда этой помощи

+2

Это действительно работает синтаксически. Я вижу на панели инструментов dev, что статус ответа действительно 206, но у меня все еще есть «HTTP/1.0 200 OK Cache-Control: no-cache Дата: Чт, 05 Март 2015 18:45:02 GMT« просто под моим элементом , когда я проверяю исходный код с помощью инструмента хром ... У него есть какая-либо заболеваемость? –

+1

Я также получаю этот заголовок, добавленный к телу ответа –

+0

Привет @PierredeLESPINAY вы пробовали в среде (sf) prod? проверьте комментарий автора по самому вопросу. Дайте мне знать – Matteo

1

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

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

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

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 будет сгенерирован автоматически. Если вы пройдете один, то его содержимое просто устанавливается равным оказанной шаблона (как вы можете видеть в the code)

+0

Это должен быть правильный ответ. Вы также можете напрямую использовать метод 'render':' public function render ($ view, array $ parameters = array(), Response $ response = null) '. Таким образом, вызов будет выглядеть следующим образом: 'return $ this-> render ('AcmeBundle: Video: show.html.twig', array ('video' => video), новый Response ('', 206)); – StockBreak

1

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

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