2015-03-05 15 views
9

Od czasu, gdy przeczytałem, że Chrome ma problem z zapętlaniem wideo HTML5, jeśli kod odpowiedzi nie jest 206, chciałbym renderować mój szablon z kodem 206.Renderowanie szablonu o określonym kodzie statusu

Jeszcze nie znalazłem nigdzie, jak określić kod HTML podczas renderowania szablonu ... Czy ktoś już próbował tego i się powiódł?

+0

nie wiem dlaczego, że jest inaczej, ale ten problem rozwiązał się sam, gdy Ustawiłem aplikację na test/prod env. Nagle wideo zapętla się tak, jak powinno. –

Odpowiedz

6

W kontrolerze można tworzyć i zwraca obiekt Response z treści i określonego kodu powrotu, jak przykładowo:

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

nadzieję, że ta pomoc

+2

To rzeczywiście działa syntaktycznie. Widzę na pasku narzędzi deweloperów, że status odpowiedzi jest rzeczywiście 206, ale nadal mam "HTTP/1.0 200 OK Cache-Control: no-cache Data: czw, 05 marca 2015 18:45:02 GMT" tylko pod moim elementem , kiedy sprawdzam kod źródłowy za pomocą narzędzia chrome ... Czy ma jakieś zapytywanie? –

+1

Dostaję także ten nagłówek przedrostka do treści odpowiedzi –

+0

Hi @ PierredeLESPINAY czy próbowałeś w środowisku (sf) prod? sprawdź autora komentarza na temat samego pytania. Daj mi znać – Matteo

1

Chyba cię na to przed jesteś renderując szablon otrzymasz pożądany wynik:

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

btw.
Klasa udostępnia stałe dla wszystkich prawidłowych stanów HTTP.

6

Możesz przekazać obiekt odpowiedzi z renderResponse, który ma niezbędny kod statusu.

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

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

Jeśli nie przechodzą w Response ze swoim renderResponse jeden będzie generowane automatycznie. Jeśli przejść jedną następnie jego zawartość jest po prostu ustawić do renderowanego szablonu (jak widać w the code)

+0

To powinna być poprawna odpowiedź. Możesz także użyć bezpośrednio metody 'render':' public function rendering ($ view, array $ parameters = array(), Response $ response = null) '. Tak więc wywołanie będzie: 'return $ this-> render ('AcmeBundle: Video: show.html.twig', array ('wideo' => wideo), new Response ('', 206));' – StockBreak

1

Nowa realizacja

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