Kohana создает функцию контроллера в другом контроллере - PullRequest
0 голосов
/ 14 февраля 2011

я хочу создать экземпляр функции контроллера 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();


    }

Спасибо!

1 Ответ

1 голос
/ 14 февраля 2011

Не рекомендуется подключать контроллеры друг к другу, как это. Таким образом, ваше приложение будет очень привязано, и оно станет беспорядком.

Постарайтесь отделить вещи настолько, насколько сможете. Вы можете сделать это, например, поместив логику в модель, где контроллеры могут получить ее.

В идеальной ситуации ваш контроллер вообще не будет обрабатывать такое количество данных, но в основном будет пытаться моделировать ваши представления.

В настоящее время предпочтительным методом будет использование классов представлений, которые передают данные из ваших моделей в ваши представления. Таким образом, представление будет стоять в основном само по себе и иметь очень небольшое соединение с контроллером, что упрощает повторное использование ваших представлений.

Еще одна особенность Kohana-3, которая приходит в голову, - это использование класса Request для выполнения дополнительного внутреннего запроса, который позволит вам повторно использовать выходные данные контроллера в отсоединенном виде. 1011 *

Вы бы использовали это так:

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

Где отклик - это обработанный вывод от выполненного запроса, который вы можете вывести в своем представлении. Этот метод подходит для корзины, которая отображается на каждой странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...