Как я должен передать данные класса в мои представления с использованием Codeigniter? - PullRequest
0 голосов
/ 08 февраля 2012

Я использую Codeigniter для создания веб-приложения и пытаюсь следовать правилам OOP, MVC и Codeigniter. Несколько вещей определенно ускользают от меня. Ниже приведено упрощенное объяснение того, что меня смущает.

У меня есть таблица 'companies' и модель Companies_model. Эта модель имеет закрытые переменные, такие как id, name и url. Эта модель имеет метод с именем load_data ($ id), который использует идентификатор для загрузки всех данных о компании в переменные класса. Этот $ id идет от URL. Наконец, эта модель имеет открытые методы получения, которые возвращают значения.

У меня есть страница профиля на моем сайте для каждой компании в моей системе. В контроллере Companies я загружаю данные этой компании следующим образом.

$this->load->model( 'Companies_model', 'Companies_profile' );
$this->Companies_profile->load_data( $this->uri_company_id );

Когда моя другая логика завершена в контроллере, у меня есть следующий код для рендеринга представления:

$this->data['Companies_profile'] = $this->Companies_profile;
$this->load->view( 'profiles/companies_profile_view', $this->data );

На мой взгляд, я отображаю данные следующим образом:

<p>This company's name is <?php echo $Company_profile->get_name(); ?>.</p>

Все это кажется излишним. Почему я передаю данные в представление, когда оно уже доступно в конкретном экземпляре Companies_method? Я чувствую растерянность и что я делаю что-то не так, но я не могу понять, что это такое. Возможно, я не делаю ничего плохого, но еще не столкнулся с причиной некоторых из этой структуры. В целом, мое приложение довольно простое. Может кто-то пролить свет на то, как правильно организовать и передать данные в представления? Зачем передавать данные, а не просто делать их доступными в базовом классе CI, $ this?

ПРИМЕЧАНИЕ. У меня есть несколько экземпляров Companies_model на каждой странице, которую я отображаю, потому что у меня есть список связанных компаний на каждой странице профиля.

Ответы [ 2 ]

2 голосов
/ 08 февраля 2012

Это MVC, по крайней мере так, как это делается в CodeIgniter.Разделение отображения значений от извлечения их из базы данных.В таких простых случаях преимущества на самом деле не видны.

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

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

1 голос
/ 08 февраля 2012

Передача объекта класса в его представление нарушает идею MVC. MVC предназначен для разделения частей программирования на 3 аспекта. Модель, Вид и Контроллер. То, что вы передаете представлению, это только то, что нужно представлению. Представлению, вероятно, не нужен весь объект. Вероятно, ему нужны только определенные биты информации от объекта. Это позволяет держать бизнес-логику подальше от визуального дизайна. Это позволяет веб-дизайнеру, который знает HTML и немного PHP, войти и вносить изменения, не зная, как работают ваши объекты. он видит.

<?php echo $company_name ?> 

, что не техническому человеку легче интерпретировать, чем

<?php echo $company->getName(); ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...