Доступ к модели из представления

#php #codeigniter

#php #codeigniter

Вопрос:

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

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

 $data['myvariable'] = $this->mymodel->myfunction();
  

Эта функция в модели проверяет все записи из базы данных, где отображается имя пользователя, и вставляет в массив все идентификаторы событий. Я попытался добавить дополнительный оператор if перед ссылками в цикле foreach, который проверял, находится ли идентификатор из ссылки в массиве, но возникли некоторые проблемы с контроллером. (я думаю, что я не смог присвоить массив переменной $data['myvariable'] ).

Я знаю, что доступ к модели из представления не является «правильным»… Кто-нибудь знает, как решить эту проблему?

Комментарии:

1. Blady1988, мне очень трудно понять, в чем ваша проблема, вероятно, вам было бы очень полезно переформулировать это или изолировать проблему в четкий вопрос, на который можно ответить. i think that I couldnt assign the array to the variable определенно следует уточнить.

Ответ №1:

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

 $enrolled = $this->your_model->your_method($param);
if($enrolled){

process links here;
  

}

Комментарии:

1. Но получить доступ к модели, на мой взгляд?

2. @Blady Я не уверен, почему вы должны обращаться к модели из представления. Конечно, это возможно в Codeigniter, потому что это не навязывает строгий шаблон проектирования MVC, вам просто нужно загрузить модель в представление. Вот так: $this-> load->model(‘имя_модели’);

3. Я должен получить доступ к модели из представления, потому что в представлении, когда я нажимаю на ссылку с идентификатором, она должна быть отключена. В контроллере я не могу этого сделать … (я думаю, что я не могу) вот почему я пишу здесь

4. @Blady если вы используете ajax, то вам не нужно обращаться к модели из представления. Как только вы нажмете на ссылку в своем представлении, оно может отправить ajax-запрос контроллеру, который может вызвать модель, а затем обработать данные для отправки обратно через ajax-запрос. Конечно, вам было бы лучше использовать немного jQuery для реализации, но это должно быть довольно просто.

Ответ №2:

Я бы сказал, что это зависит и от используемого вами MVC. Возможно, вам придется загрузить модель в представление, чтобы использовать ее из представления, не идеально правильный подход, поскольку вы могли бы загрузить ее через свой контроллер и установить как переменную для передачи в представление. Если передаваемая переменная содержит несколько выходных данных, таких как запрос из базы данных или что-то еще, вы можете передать ее в представление как объект массива, а затем в представлении выполнить while, for, foreach, что угодно в этом массиве.