2011-01-25 31 views
6

tôi khá bối rối làm thế nào để sử dụng partialLoopLàm thế nào để sử dụng Vòng một phần Zend Framework với các đối tượng

Hiện nay tôi sử dụng

foreach ($childrenTodos as $childTodo) { 
    echo $this->partial('todos/_row.phtml', array('todo' => $childTodo)); 
} 

$childrenTodos là một Doctrine\ORM\PersistantCollection, $childTodo là một Application\Models\Todo

tôi đã cố gắng làm

echo $this->partialLoop('todos/_row.phtml', $childrenTodos) 
      ->setObjectKey('Application\Models\Todo'); 

Nhưng một phần khi tôi cố gắng truy cập các thuộc tính/chức năng của lớp Todo, tôi không thể nhận được chúng luôn kết thúc bằng cách gọi đến phương thức không xác định Zend_View::myFunction() khi tôi sử dụng $this->myFunction() một phần hoặc nếu tôi thử $this->todo->getName() Tôi nhận được " Gọi hàm thành viên getName() trên một đối tượng không phải là ". Làm cách nào để sử dụng partialLoops?

Trả lời

8

Hãy thử điều này

echo $this->partialLoop('todos/_row.phtml', $childrenTodos) 
     ->setObjectKey('object'); 

Sau đó, trong một phần của bạn, bạn có thể truy cập các đối tượng như thế này

$this->object 

object là tên của biến rằng một đối tượng sẽ được gán cho

Bạn cũng có thể làm điều này một lần trong Bootstrap của bạn hoặc lớp khởi tạo khác nếu bạn có quyền truy cập vào đối tượng xem như vậy

protected function initPartialLoopObject() 
{ 
    $this->_view->partialLoop()->setObjectKey('object'); 

    $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); 
    $viewRenderer->setView($this->_view); 
} 
+1

Tôi không chắc chắn lý do tại sao tôi vẫn nhận được cuộc gọi đến chức năng trên lỗi không đối tượng, mã của tôi http://pastebin.com/z07phdHj. Điều kỳ lạ là khi tôi thử 'echo get_class ($ this-> todo)' tôi nhận được 'Zend_View' –

+1

Bạn có thể thử đặt nó trong Bootstrap hay tương tự, có thể là do bạn đang sử dụng' todo' cho các đối tượng sau 'partialLoop' khi chạy? –

+2

Tôi nghĩ rằng nó sẽ là một ý tưởng tốt hơn để thiết lập nó chỉ b4 'echo $ this-> partialLoop()' vì nó không phải là một ứng dụng chung. Dù sao cũng cảm ơn bạn –

1

Tôi cũng đã có lỗi "Gọi hàm hoạt động không phải đối tượng" khi cố gắng cú pháp được đề xuất, có vẻ như chúng đã thay đổi điều gì đó trên các phiên bản sau của Zend Framework. Các công trình sau đây cho tôi trên ZF1.12:

echo $this->partialLoop() 
->setObjectKey('object') 
->partialLoop('todos/_row.phtml', $childrenTodos); 
Các vấn đề liên quan