Могу ли я загружать контент в представление с разных контроллеров при использовании codeigniter? - PullRequest
0 голосов
/ 06 февраля 2011

У меня есть 2 файла контроллера: login.php и tables.php.

login.php загружает представление, которое мне нужно:

function locales(){
        $data['main_content'] = 'negocios';
        $this->load->view('includes/template', $data);
    }

однако внутри этого представления я использую:

<?php echo $this->table->generate($records); ?>
            <?php echo $this->pagination->create_links(); ?>

, что делает ссылку на контроллер:

class Tables extends Controller{

    function createTables(){
        $this->load->library('pagination');

        $config['base_url'] = 'http://localhost/ci/index.php/tables/createTables';
        $config['total_rows'] = $this->db->get('usuarios')->num_rows();
        $config['per_page'] = 10;
        $config['num_links'] = 20;

        $this->pagination->initialize($config);

        $data['records'] = $this->db->get('usuarios', $config['per_page'], $this->uri->segment(3));
    }
} 

Могу ли я выполнить то, что я пытаюсь сделать?если да, то как?Кроме того, я знаю, что не рекомендуется обращаться к БД непосредственно в контроллере, но я делаю это только ради практики.

Ответы [ 2 ]

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

Вы пытаетесь получить доступ к базе данных напрямую с контроллера?На мой взгляд, это не очень хорошая практика.Шаблоны MVC предназначены для отделения контроля от представлений и данных.

Цитирование википедии:

Модель управляет поведением и данными домена приложения , отвечаетна запросы информации о его состоянии (обычно из представления) и отвечает на инструкции по изменению состояния (обычно из контроллера).В управляемых событиями системах модель уведомляет наблюдателей (обычно представления), когда информация изменяется, чтобы они могли реагировать.

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

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

Я попытаюсь создать модель под названием «Таблицы», и внутри нее поместим это:1019 *

class Tables extends Model{

    function createTables(){
        $this->load->library('pagination');

        $config['base_url'] = 'http://localhost/ci/index.php/tables/createTables';
        $config['total_rows'] = $this->db->get('usuarios')->num_rows();
        $config['per_page'] = 10;
        $config['num_links'] = 20;

        $this->pagination->initialize($config);

        return $this->db->get('usuarios', $config['per_page'], $this->uri->segment(3));
    }
} 

Тогда ваш контроллер входа может быть:

function locales(){
   $data['main_content'] = 'negocios';
   $this->load->model('tables');
   $data['records'] = $this->tables->createTables();
   $this->load->view('includes/template', $data);
}

Теперь вы можете изменить вид:

// all your code...
<?php 
echo $records; 
echo $this->pagination->create_links();
?>
// more code...

Если вам не нужно звонить$this->tables->createTables() каждый раз, вы должны изменить контроллер:

function locales(){
   $data['main_content'] = 'negocios';
   $this->load->model('tables');
   if(yourcondition)
      $data['records'] = $this->tables->createTables();
   $this->load->view('includes/template', $data);
}

И ваш взгляд:

// all your code...
<?php 
if(isset($records))
   echo $records; 
echo $this->pagination->create_links();
?>
// more code...
1 голос
/ 06 февраля 2011

Я не уверен, что вы правильно подключаетесь к точкам в своем вопросе. Вы не можете напрямую ссылаться на все контроллеры в представлениях.

Для более полного понимания того, что вы печатаете, ключевое слово $this, которое вы используете как в своем контроллере, так и в файлах просмотра, ссылается (для всех интенсивных целей *) на используемый вами контроллер, поэтому не имеет смысла позвоните $this->{controller}->function(), потому что вы будете вызывать контроллер контроллера.

Я полагаю, вы пытаетесь реализовать структуру HMVC . Была проделана некоторая работа для реализации этого в CodeIgniter через Модульные расширения

Но обычно кодировщик Vanilla - это 1 контроллер за один раз, но этот контроллер может загружать множество видов и / или моделей.


* Я знаю, что это экземпляр CI, но экземпляр CI для всех интенсивных целей IS контроллер

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