2011-02-14 60 views
0

我想實例化一個kohana控制器函數,該函數從另一個控制器的購物籃中獲取內容。Kohana在另一個控制器中實例化一個控制器函數

換句話說

,在一個控制器我有(在basket.php)

 public function action_index() 
{ 
    $basket = $this->basket; 
    $contents = $basket->contents->find_all(); 

    $this->view->basket = $basket; 
    $this->view->contents = $contents; 
} 

,我想打電話給其他控制器此功能,因爲sale.php我想,該產品已經在存在籃子,在列表中以某種方式標記。 我想在控制器sale.php中調用這個函數,其中的產品實際上列出。

我有sale.php

公共職能action_browse($ ID,$ CATEGORY_ID = NULL){

$sale = Model::factory('sale')->active()->find($id); 
    $basket_content = $this->user->get_basket($sale); 


    if (! $sale->loaded()) 
    { 
     throw new Kohana_Request_Exception('Sale not found.'); 
    } 

    if (isset($category_id)) 
    { 
     $category = $sale->categories->find($category_id); 
     if (! $category->loaded()) 
     { 
      throw new Kohana_Request_Exception('Category not found.'); 
     } 

     $products = $sale->products->category($category_id)->find_all(); 


     $this->view->category = $category; 
    } 
    else 
    { 
     $products = $sale->products->find_all(); 


    } 

謝謝!

+0

您使用的是哪個版本的Kohana?我認爲這是Kohana 3.但我認爲這仍然是3.0.x – Ikke

+0

它是kohana 3.是否有可能做到這一點? – dana

+0

我不承認Dispatch類。它從何而來? – SpadXIII

回答

1

建議不要像這樣將控制器連接到彼此。這樣你的應用程序就會非常捆綁,而且會變得一團糟。

嘗試儘可能多地分離事物。例如,您可以將邏輯放在控制器可以獲取模型的位置。

在理想的情況下,你的控制器根本不會處理那麼多的數據,但它主要是用你的模型來表達你的觀點。

當前的首選方法是使用視圖類,它將數據從模型傳遞到視圖。這樣,一個視圖將主要位於它自己的視圖上,並且與控制器的連接非常少,這使重用視圖變得更加容易。

想到Kohana-3的另一個功能是使用Request類來執行額外的內部請求,這將允許您以分離方式重新使用控制器的輸出。

你會使用這樣的:

$response = Request::factory('basket/show')->execute()->response 

哪裏響應將是來自執行請求渲染輸出,可以輸出在您的視圖。此方法適用於在每個頁面上呈現的籃子。

+0

它不這樣工作,當它執行它實際上試圖插入一個空籃子數據庫... – dana

+0

你能詳細說明你在做什麼(編輯你的問題)嗎? – Ikke

+0

我剛剛編輯了這個問題。我希望這是足夠清楚的,並且足夠符合我的問題。 – dana

相關問題