2015-03-05 42 views
9

Vì tôi đã đọc rằng Chrome đang gặp sự cố khi lặp lại video HTML5 nếu mã phản hồi không phải là 206, tôi muốn hiển thị mẫu của mình bằng mã 206.Làm cho mẫu có mã trạng thái cụ thể

Tuy nhiên, tôi chưa tìm thấy bất kỳ nơi nào để chỉ định mã html khi hiển thị mẫu ... Có ai đã thử điều đó và đã thành công không?

+0

Tôi không biết tại sao đó là khác nhau nhưng vấn đề mà giải quyết riêng của mình khi Tôi đặt ứng dụng của tôi vào thử nghiệm/prod env. Đột nhiên, video lặp lại như mong muốn. –

Trả lời

6

Trong bộ điều khiển bạn có thể tạo và trả về một đối tượng đáp ứng với nội dung và mã trở lại quy định, ví dụ như:

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

Hope trợ giúp này

+2

Điều này thực sự hoạt động theo cú pháp. Tôi có thể thấy trong thanh công cụ dev rằng trạng thái phản hồi thực sự là 206 nhưng tôi vẫn có "HTTP/1.0 200 OK Cache-Control: no-cache Ngày: Thứ năm, 05 tháng 3 năm 2015 18:45:02 GMT" theo phần tử của tôi khi tôi kiểm tra mã nguồn bằng công cụ của chrome ... Có bất kỳ tỷ lệ nào không? –

+1

Tôi cũng nhận được tiêu đề này được thêm vào phần thân phản hồi –

+0

Xin chào @PierredeLESPINAY bạn đã thử trong môi trường sản xuất (sf) chưa? kiểm tra nhận xét của tác giả về câu hỏi đó. Hãy cho tôi biết – Matteo

1

Tôi nghĩ tôi bạn tại đây trước khi bạn có hiển thị mẫu bạn sẽ nhận được kết quả mong muốn:

btw.
Lớp học Symfony\Component\HttpFoundation\Response cung cấp các hằng số cho tất cả các trạng thái HTTP hợp lệ

6

Bạn có thể chuyển đối tượng phản hồi với renderResponse có mã trạng thái cần thiết.

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

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

Nếu bạn không vượt qua trong Response với kết xuất renderResponse của bạn sẽ được tạo tự động. Nếu bạn vượt qua một thì đó là nội dung chỉ được đặt cho các mẫu được kết xuất (như bạn có thể thấy trong the code)

+0

Đây phải là câu trả lời đúng. Bạn cũng có thể sử dụng phương thức 'render' trực tiếp:' public function render ($ view, mảng $ parameters = array(), Response $ response = null) '. Vì vậy, cuộc gọi sẽ là: 'return $ this-> render ('AcmeBundle: Video: show.html.twig', mảng ('video' => video), phản hồi mới ('', 206));' – StockBreak

1

thực hiện mới

protected function renderError(array $parameters, $statusCode = 500) 
{ 
    return $this->render(
     'default/error.html.twig', 
     $parameters, 
     new Response('', $statusCode) 
    ); 
} 
Các vấn đề liên quan