codeigniter - загрузка библиотеки из представления? - PullRequest
10 голосов
/ 12 апреля 2010

У меня есть некоторые данные, которые я должен отобразить в виде таблицы.

Я думаю, что я должен передать данные из контроллера в виде $ data ['events'] = array (.....

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

        <?php
    $this->load->library('table');

    echo $this->table->generate($events);
    ?>

это не работает, хотя - это приводит к фатальной ошибке: вызов функции-члена generate () для необъекта

Если я вставлю тот же код в контроллер, очевидно, используя -> generate ($ data ['events'], таблица отобразится правильно.

Должен ли я узнать, что представления не могут загружать библиотеки или я что-то делаю не так? Или, может быть, я должен захватить вывод библиотеки в контроллере и отправить его в представление?

Ответы [ 8 ]

26 голосов
/ 01 августа 2012

Если вам нужно вызвать библиотеку (и ее функции) в представлении, вы можете сделать это:

$CI =& get_instance();
$CI->load->library('library_name');
$CI->library_name->yourFunction();
12 голосов
/ 12 апреля 2010

Вы должны запустить ниже код в контроллере:

<?php
$this->load->library('table');

echo $this->table->generate($events);
?>

и сохранить данные в переменной, а затем отправить в представление.

4 голосов
/ 20 января 2015

Вы можете автоматически загрузить библиотеку в config/autoload.php

$autoload['libraries'] = array('database','session','table');

Тогда вы можете просто вызывать функции в вашем представлении.

echo $this->table->generate($events);

Это было полезно для меня, когда я создавал динамический заголовок меню. я автоматически загрузил библиотеку с функцией создания динамического меню, а затем просто вызвал эту функцию из представления, кстати, это плохая практика.

4 голосов
/ 08 марта 2013

Чтобы ответить на то, что вы делаете неправильно, вы должны знать, что класс CodeIgniter не объявлен в представлении, и это так по причине - абстрагировать ваш код PHP от вашего HTML. Представления должны содержать минимальный код PHP (базовые циклы, условия).

Имея это в виду, вы должны включить вашу библиотеку как обычно в контроллер следующим образом:

контроллер

$this->load->library('table');
$data['events_table'] = $this->table->generate($events);

$this->load->view(....);

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

вид

<?php echo $events_table; ?>
3 голосов
/ 12 апреля 2010

Обратите внимание: следует: CodeIgniter обладает гибкостью в том смысле, что позволяет вам делать вещи неправильно Просто это немного усложняет. Вы можете делать почти все в представлении, даже если вы не должны; но загрузка помощников, моделей и представлений должна выполняться в контроллере.

3 голосов
/ 12 апреля 2010

Это неверный подход к MVC. Вам не нужно загружать библиотеку в представлении, потому что все представления загружаются из одного КОНТРОЛЛЕРА, поэтому каждый внешний помощник или библиотека должны загружаться из контроллера и использоваться или отправляться в представления

С уважением,
Pedro

1 голос
/ 15 января 2015

Просто загрузите библиотеку на контроллер, а затем используйте ее для просмотра.

Контроллер:

$this->load->library('table');
$data = array(
    array(1,2,3,4,5),
    array(1,2,3,4,5),
    array(1,2,3,4,5),
);
$this->load->view('the_view', compact('data'));

Вид:

echo $this->table->generate($data);
0 голосов
/ 27 октября 2014

В контроллере или модели используйте

$this->load->library('mylib');
$mylib=$this->mylib;
$data['mylib']=$mylib;
$this->load->view('myview',$data,false);

, и вместо этого вы можете использовать библиотеку напрямую:

$mylib->myfunction();

Это решение не похоже на MVC, но работает, если вам нужно.

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