CodeIgniter $ this-> load-> vars ($ array) - PullRequest
3 голосов
/ 06 июля 2011

CodeIgniter имеет метод $this->load->vars($array), который идеально используется в родительском контроллере для предоставления глобального доступа к системным переменным непосредственно в представлении. Например:

$this->data['username'] = "john";
$this->load->vars($this->data);

Тогда в представлении вы можете легко получить доступ к Джону, повторив $username.

У меня вопрос, возможно ли использовать $this->load->vars($array) из модели вместо контроллера? Это позволит мне абстрагироваться от некоторых деталей из моего контроллера, сделав его чище. Какие изменения я должен сделать, чтобы это работало? Вы бы порекомендовали это; ты думаешь это ломает MVC?

Кроме того, я использую Datamapper ORM, поэтому мои модели фактически расширяют объект Datamapper, а не объект Model.

Спасибо!

1 Ответ

2 голосов
/ 06 июля 2011

Можно ли использовать $ this-> load-> vars ($ array) из модели вместо контроллера?

Как уже упоминалось, да, вы можете сделать это, вы даже можете загрузить представление из модели или даже запустить $this->load->vars() в представлении и загрузить еще одно представление.

Это позволит мне абстрагироваться от некоторых деталей измой Контроллер, делающий его чище.

Это все равно, что подметать грязь под ковриком, он не ушел - он просто ушел куда-то еще, где вы обязательно столкнетесь с ним позже.

Вы бы порекомендовали его;Как вы думаете, это ломает MVC?

Это ничего не «сломает», но подразумевает, что, возможно, ваша концепция MVC несколько нарушена.Если он не имеет никакого отношения к слою данных и не имеет отношения к слою представления, он не принадлежит модели.Есть хороший шанс, что могут быть и другие вещи, которые тоже не совсем там принадлежат ...

Я использую Datamapper ORM, поэтому мои модели фактически расширяют объект Datamapper, а не Modelobject.

Возможно, вам потребуется вызвать get_instance() и присвоить его переменной или свойству класса для использования в моделях DM, чтобы вы могли получить доступ к объекту Codeigniter.

Пример:$CI =& get_instance(); $CI->load->vars();

Предложение:

Возвращает данные из модели в простейшей, наиболее пригодной для повторного использования форме, а затем присваивает их переменным вида в Controller.Если я выискиваю источник некоторых переменных в файле представления, то место, в котором я их ищу, находится last в Модели.Вы можете в конечном итоге вернуться к этому проекту в будущем, поэтому постарайтесь быть максимально последовательным и придерживаться предложенных, ожидаемых методов.

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