2012-05-04 48 views
0

我的問題是Kohana只渲染視圖。當我在Controller_Other中Kohana使視圖:: factory('/ foo/bar')在foo類中的打擊條

View::factory('/foo/bar')它首先沒有命中Controller_Foo。我希望它擊中控制器,然後渲染視圖。

class Controller_Other extends Controller_Template { 
    public $template = 'main'; 
    public function action_index() { 
     $this->template->body = View::factory('/foo/bar'); 
    } 
} 

我將如何得到它通過控制器首先運行:

class Controller_Foo extends Controller_Template { 
    public function action_bar() { 
     $this->myVar = 'foo'; 
    } 
} 

,這樣在視圖中,$myVar總是在views/foo/bar.php設置,當我把它從其他View::factory()

編輯:

必須有比強迫action_bar來呈現自己的觀點,以字符串,然後去一個更清潔的方式:

$foo = new Controller_Foo($this->request, $this->response); 
$this->template->body = $foo->action_bar(); 

回答

2

我不知道自己在做什麼 - 需要綁定全局視圖變量或做內部請求。 無論如何,這裏是這兩種情況的例子:

綁定全局視圖變量

class Controller_Other extends Controller_Template { 
    public $template = 'main'; 

    public function action_index() { 
     View::bind_global('myVar', 'foo'); 
     //binds value by reference, this value will be available in all views. Also you can use View::set_global(); 

     $this->template->body = View::factory('/foo/bar'); 
    } 

}

做內部請求

這是 '富/ bar' 的動作

class Controller_Foo extends Controller_Template { 

    public function action_bar() { 
     $myVar = 'foo'; 
     $this->template->body = View::factory('/foo/bar', array('myVar' => $myVar); 
    } 
} 



class Controller_Other extends Controller_Template { 
    public $template = 'main'; 
    public function action_index() { 
     $this->template->body = Request::factory('foo/bar')->execute()->body(); 
     //by doing this you have called 'foo/bar' action and put all its output to curent requests template body 
    } 
} 
+0

內部請求看起來像我要去的。我只是想讓action_bar成爲它自己的東西,以便每次渲染該視圖時,我都不需要在其他地方設置myVar。順便說一句,是$ this-> myVar吧?不應該只是$ myVar嗎?任何人,你完全解決了我的問題。這比創建一個新的控制器對象並調用該方法要乾淨得多。 – tester

+0

是的,'$ this-> myVar'應該是'$ myVar',謝謝你爲我指出來。 :)編輯我的答案。很高興我能幫助你。 :) – egis

0

你應該總是通過$ myVar的變量之前先查看使其像

public function action_index() { 
    $this->template->body = View::factory('/foo/bar')->set('myVar', 'foo'); 
} 

在其他控制器中,您應該重新設置它,因爲View僅僅是一個臨時狀態。如果您打算使用相同的視圖腳本不同的地方,你可以查看實例分配給某個變量和地方使用它像:

public function action_index() { 
    $this->view = View::factory('/foo/bar')->set('myVar', 'foo'); 

    $this->template->body = $this->view ; 
} 

public function action_bar() { 
    $this->template->head = $this->view ; 
} 
+0

對不起,我忘了在我的例子中..我在我的代碼中有action_bar,當我去'$ this-> myVar'時,'$ myVar'沒有在視圖中定義。 – tester

+0

我更新了更具體的問題 – tester

+0

看起來修改的答案 –

相關問題