我想实例化一个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
public function 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 :(得分:1)
不建议将控制器彼此耦合。这样你的应用程序将非常紧密,它会变得一团糟。
尝试尽可能地分解事物。例如,您可以通过将逻辑放在控制器可以获取它的模型中来执行此操作。
在一个理想的情况下,你的控制器根本不会处理那么多的数据,但它主要是试图模拟你的视图。
当前首选的方法是使用视图类,将模型中的数据传递给视图。这样,视图主要依赖于它自己,并且与控制器的连接很少,这使得重用视图变得更加容易。
考虑到Kohana-3的另一个特性是使用Request类来执行额外的内部请求,这将允许您以分离的方式重用控制器的输出。
您可以这样使用它:
$response = Request::factory('basket/show')->execute()->response
其中response是已执行请求的渲染输出,您可以在视图中输出。此方法适用于在每个页面上呈现的篮子。