2010-09-27 26 views
6

Vấn đề: đôi khi trong bộ điều khiển zend của chúng tôi, chúng tôi không muốn tập lệnh được xuất trực tiếp, mà là muốn nội dung của tập lệnh đó. Một ví dụ: khi chúng tôi cần kết quả đầu ra html của một tập lệnh xem được bao gồm trong một cấu trúc khác như JSON hoặc XML để xử lý ở phía máy khách.Cách chụp một đầu ra dạng xem Zend thay vì thực sự xuất ra

Tôi đã tìm thấy kết quả ở đây khi tràn ngăn xếp, nhưng không quá nhanh vì nó ở trong một ngữ cảnh khác. Tôi đã đấu tranh với điều này trong 2 ngày nay. Hóa ra nó rất đơn giản:

// in our controllers' action method 
    $this->_helper->layout()->setLayout('empty'); // disable layout 
    $this->_helper->viewRenderer->setNoRender(true); // make sure the script is not being rendered 

    // any of your code here 
    $html = $this->view->render('projects/climate.phtml'); // return the view script content as a string 
    $json = array('html'=>$html, 'initData'=>'my other needed data'); 
    echo json_encode($json); 

Tôi hy vọng điều này rõ ràng và sẽ hữu ích cho ai đó.

+1

Hi Slav. Bạn được chào đón chia sẻ kiến ​​thức của mình tại đây, nhưng đây là trang web Giải Đáp. Bạn nên đăng nó dưới dạng bình luận hoặc câu trả lời cho câu hỏi gốc. – takeshin

+0

Đó là những gì tôi sẽ làm. – Slavic

Trả lời

9

Hãy thử sử dụng

public myAction() { 
    $this->_helper->json(array(
     'html' => $this->view->render('projects/climate.phtml'), 
     'initData'=> 'my other needed data', 
    )); 
} 

Các Helper hành động Json sẽ thường

  • vô hiệu hóa các viewRenderer
  • vô hiệu hóa việc bố trí
  • json_encode mảng
+0

Xe tăng Julien! Phiên bản của bạn mỏng hơn một chút. – Slavic

Các vấn đề liên quan