получить доступ к модели из представления в codeigniter? - PullRequest
11 голосов
/ 27 апреля 2010

Может кто-нибудь сказать мне, как я могу получить доступ к модели из представления в codeigniter?

Ответы [ 9 ]

17 голосов
/ 13 января 2013

Загрузка модели на контроллер

$this->load->model('yourmodel');

Назначьте эту модель такой переменной

$data['model_obj'] = $this->yourmodel; 

и назначьте этот массив данных вашему шаблону представления

Использование объекта $ model_obj в шаблоне представления для вызова методов модели

$model_obj->some_method()

Надеюсь, это поможет ...

6 голосов
/ 27 апреля 2010

Смотрите тему:

Просмотр вызова модели

Кстати, зачем вам нужен model с view, вы можете отправлять данные модели в представление с controller, что является обычным и лучшим подходом.

В качестве хорошего примечания: держите логику обработки вне поля зрения, вместо нее следует использовать controller.

5 голосов
/ 28 июня 2014

Вы можете использовать следующий код:

   $ci =&get_instance();
   $ci->load->model(your model);
   $ci->(your model)->(your function);     
   Note: You have to call your model in your controller.Its working fine
5 голосов
/ 13 мая 2010

CodeIgniter's $this->load->model() абсолютно ничего не возвращает. Посмотрите на это: system/libraries/Loader.php.

Это абсолютно ничего не выдаст:

$model = $this->load->model('table');

print_r($model);

И следующий пример даст вам фатальную ошибку Call to a member function some_func() on a non-object:

$model = $this->load->model('table');

$model->some_func();

Неважно, существует ли эта функция, $model не является объектом.

Нужно создать в вашей модели метод, который возвращает данные, затем вызвать эту функцию и передать результаты в файл представления:

$this->load->model('table');
$data = $this->table->some_func();
$this->load->view('view', $data);

PS: Каков единственный ответ, который вы приняли абсолютно неправильно?

1 голос
/ 23 июня 2018

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

   $ci =&get_instance();
   $ci->load->model(model_name);
   $ci->model_name->function_name(); 

в старых версиях codeigniter для работы использовался следующий код:

$this->load->model('model_name'); 
model_name::function();   

но при тестировании на CI 3.1.9 выдает следующую ошибку Сообщение: неопределенное свойство: CI_Loader :: $ model_name_model

Примечание: Я использую эту технику в представлениях шаблонов (боковая панель, меню ... и т. Д.), Которая не используется повсеместно в моем приложении, если вы хотите получить доступ к модели из любой точки вашего приложения. эту модель в целом, добавив ее в массив автозагрузки в application / config / autoload.php

1 голос
/ 10 декабря 2010

Поскольку $ model не является объектом, вы можете вызвать модель "table" с помощью оператора разрешения области видимости :: ::, который может вызывать функцию самого класса без какого-либо экземпляра объекта.

$this->load->model('table'); 
table::some_funct();

Примечание: вам также нужно сделать статическую функцию "some_funct" внутри вашей "таблицы" модели.

0 голосов
/ 01 мая 2014

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

public function index()
{

    $this->load->model('persons');
    $data['mydata'] = $this->persons->getAllSessionData();
    $this->load->view('test_page', $data);
}

в поле зрения

print_r ($mydata);

моя функция вернула массив.

0 голосов
/ 27 июня 2013

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

http://www.as3dp.com/wp-content/uploads/2010/02/mvc_pope_krasner.png

.. но на практике с приложениями PHP, поскольку нет необходимости отслеживать изменения состояния объектов между запросами (или, по крайней мере, неэффективно), я считаю, что лучше сохранять все вызовы методов модели в контроллере и передавать результат в посмотреть, если это возможно.

0 голосов
/ 21 марта 2011

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

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