CodeIgniter загрузить контроллер из поля зрения - PullRequest
2 голосов
/ 29 апреля 2011

Есть ли способ загрузить контроллер из представления?

Вот то, что я аффтер .. Я хочу использовать одно представление несколько раз, но это представление загружается отдельным контроллером, который предоставляет представление, информацию из базы данных. Так как эту информацию из модели я не могу просто установить $this-load->view(); и т. Д. Есть ли способ сделать это, или у него есть лучший способ?

Ответы [ 5 ]

4 голосов
/ 29 апреля 2011

Я думаю, что многие сайты сталкиваются с похожими проблемами, в том числе один, над которым я работаю, который загружает один и тот же контент БД в боковую панель почти на каждой странице сайта.Я реализовал это с помощью комбинации библиотеки и помощника:

  1. Поместите логику данных в библиотеку (моя называется common.php).Помимо взаимодействия с базой данных, вы можете захотеть, чтобы библиотека сохраняла данные в локальной переменной, если вы хотите ссылаться на нее несколько раз при одной загрузке.
    public function get_total_items()
    {
        if ($this->_total_items === NULL)
        {
            $row = $this->ci->db->query("SELECT COUNT(*) FROM items")->row();
            $this->_total_items = $row[0];
        }
        return $this->_total_items;
    }
    
  2. Создание помощниказагрузить библиотеку.(Не загружайте библиотеки в представлении!) У меня есть MY_text_helper, который загружает библиотеку и возвращает данные:

    function total_items()
    {
        $CI =& get_instance();
        return $CI->common->get_total_items();
    }
  3. Вызов вспомогательной функции из представления.

    <p> Total items: <?php echo total_items(); ?> </p>
3 голосов
/ 29 апреля 2011

Проще говоря, вы не можете и не должны загружать контроллер из представления. Это грустно, я понимаю ваше разочарование, потому что вы хотите повторно использовать логику вытягивания / действия модели в контроллере для нескольких представлений.

Существуют различные способы сделать это;

  1. Повторное использование моделей. Ваши модели должны быть очень просты для выбора данных и должны быть гладкими, но если вы делаете одно и то же снова и снова, это кажется глупым , В каком случае ...

  2. Используйте контроллер в качестве "основного контейнера" ​​ и extend на нем из любой необходимой вам логики. Таким образом, вы в основном используете контроллер в качестве шаблона, который извлекает данные из модели и загружает соответствующее представление.

1 голос
/ 29 апреля 2011

MVC не работает таким образом ... Просто повторно используйте модель - вот почему она отделена от контроллера. Если это не соответствует вашим потребностям, вам, вероятно, следует реализовать библиотеку, которая выполняет эту логику.

0 голосов
/ 13 апреля 2013

просто сделайте это, если ваш контроллер с именем controller1 поместил ссылку в поле зрения просто так

http://your -site.com / index.php / controller1 /

если вам нужна конкретная функция, добавьте ее в свой URL

http://your -site.com / index.php / controller1 / myfunction

вот оно

0 голосов
/ 29 апреля 2011

Я бы использовал библиотеку .

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

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