2011-06-28 55 views
1

我有一個控制器的方法的對象:Kohana的/ ORM - 分配關係的觀點

$post = ORM::factory('post', array('slug' => $slug); 

被髮送給視圖:

$this->template->content = View::factory('view')->bind('post', $post); 

我創建之間1-n的關係帖子和評論。迄今爲止很好。

主要問題是:我應該如何將視圖傳遞給視圖?目前我在視圖($post->comments->find_all())中看到它們,但我不覺得它是最好的方法(並且我根本不認爲符合MVC標準)。我也在考慮將它們分配給控制器中的屬性($post->comments),但是我得到關於未定義屬性的錯誤(這對我來說很有意義)。

您會如何建議解決該問題?

回答

1

爲什麼不抓住控制器中的註釋並將它們傳遞給視圖進行演示?至少我是這麼想的。

$post = ORM::factory('post', array('slug' => $slug)); 
$comments = $post->comments->find_all(); 
$this->template->content = View::factory('view')->bind('comments', $comments); 

在問候您的多頁的評論,我假設你的意思是......帖子 這是我通常會做的。

$posts = ORM::factory('post', array('slug' => $slug))->find_all(); 
$view = new View('view'); 
foreach ($posts as $post) { 
    $view->comments = $post->comments; 
    $this->template->content .= $view->render(); 
} 

儘管這可能不是實現這一目標最有利資源的方式,尤其是如果您正在處理很多帖子。因此,將帖子傳遞給視圖,然後在視圖內部執行foreach循環可能是更好的方法。

$posts = ORM::factory('post', array('slug' => $slug))->find_all(); 
$this->template->content = View::factory('view')->bind('posts', $posts); 

雖然我也不一定認爲從視圖中運行select查詢是世界上最糟糕的事情。雖然我不是專家...;)

前一段時間我問過這個問題CodeIgniter ...傳遞一個數組到視圖和循環通過它似乎是受歡迎的響應...

Using CodeIgniter is it bad practice to load a view in a loop

+0

@Serhiy(你來自烏克蘭,對不對?)好的方法,但是當我得到多個頁面時如何獲得評論呢? – user342111223

+0

來自烏克蘭,更新了我將如何處理這種情況的答案。 – Serhiy

+0

большоеспасибо:) – user342111223