0

我想在另一个控制器中实例化一个从购物篮中获取内容的 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();


    }

谢谢!

4

1 回答 1

1

不建议像这样将控制器相互耦合。这样你的应用程序就会很紧张,而且会变得一团糟。

尽可能多地解耦。例如,您可以通过将逻辑放在控制器可以获取它的模型中来做到这一点。

在理想情况下,您的控制器根本不会处理那么多数据,但它主要会尝试为您的视图建模。

当前首选的方法是使用视图类将数据从模型传递到视图。这样,视图将主要独立存在,并且与控制器的连接很少,这使得重用视图更容易。

Kohana-3 的另一个功能是使用Request类来执行额外的内部请求,这将允许您以解耦的方式重用控制器的输出。

你会像这样使用它:

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

其中 response 是已执行请求的渲染输出,您可以在视图中输出。此方法适用于在每个页面上呈现的篮子。

于 2011-02-14T10:16:29.760 回答