Модели
Модели необязательно доступны для тех, кто хочет использовать более традиционный подход MVC.
Содержание страницы
Что такое модель?
Модели — это PHP-классы, предназначенные для работы с информацией в вашей базе данных. Например, предположим, что вы используете CodeIgniter для управления блогом. У вас может быть класс модели, содержащий функции для вставки, обновления и получения данных вашего блога. Вот пример того, как может выглядеть такой класс модели:
class Blog_model extends CI_Model {
public $title;
public $content;
public $date;
public function get_last_ten_entries()
{
$query = $this->db->get('entries', 10);
return $query->result();
}
public function insert_entry()
{
$this->title = $_POST['title']; // please read the below note
$this->content = $_POST['content'];
$this->date = time();
$this->db->insert('entries', $this);
}
public function update_entry()
{
$this->title = $_POST['title'];
$this->content = $_POST['content'];
$this->date = time();
$this->db->update('entries', $this, array('id' => $_POST['id']));
}
}
Примечание
Методы в приведенном выше примере используют методы базы данных Query Builder.
Примечание
Для простоты в этом примере мы используем $_POST напрямую. Это, как правило, плохая практика, и более распространённый подход заключается в использовании библиотеки Input Library $this->input->post('title').
Структура модели
Классы моделей хранятся в каталоге application/models/. Они могут быть вложены в подкаталоги, если вы хотите организовать их таким образом.
Базовый прототип класса модели выглядит так:
class Model_name extends CI_Model {
}
Где Model_name — это имя вашего класса. Имена классов должны начинаться с заглавной буквы, а остальные буквы — строчные. Убедитесь, что ваш класс наследуется от базового класса Model.
Имя файла должно совпадать с именем класса. Например, если у вас есть такой класс:
class User_model extends CI_Model {
}
Ваш файл будет таким:
application/models/User_model.php
Загрузка модели
Ваши модели, как правило, загружаются и вызываются из методов вашего контроллера. Для загрузки модели используется следующий метод:
$this->load->model('model_name');
Если ваша модель находится в подкаталоге, укажите относительный путь от каталога моделей. Например, если у вас есть модель, расположенная в application/models/blog/Queries.php, вы загрузите её, используя:
$this->load->model('blog/queries');
После загрузки вы будете обращаться к методам вашей модели, используя объект с тем же именем, что и ваш класс:
$this->load->model('model_name');
$this->model_name->method();
Если вы хотите назначить вашей модели другое имя объекта, вы можете указать его во втором параметре метода загрузки:
$this->load->model('model_name', 'foobar');
$this->foobar->method();
Вот пример контроллера, который загружает модель, а затем отображает представление:
class Blog_controller extends CI_Controller {
public function blog()
{
$this->load->model('blog');
$data['query'] = $this->blog->get_last_ten_entries();
$this->load->view('blog', $data);
}
}
Автозагрузка моделей
Если вам нужно, чтобы определённая модель использовалась во всём приложении, вы можете указать CodeIgniter на её автозагрузку во время инициализации системы. Для этого откройте файл application/config/autoload.php и добавьте модель в массив autoload.
Подключение к базе данных
При загрузке модели не происходит автоматического подключения к базе данных. Для подключения доступны следующие варианты:
- Вы можете подключиться, используя стандартные методы базы данных описанные здесь, либо из класса контроллера, либо из класса модели.
-
Вы можете указать методу загрузки модели автоматическое подключение, передав TRUE (булево значение) в качестве третьего параметра. Будут использоваться настройки подключения, определённые в файле конфигурации базы данных:
$this->load->model('model_name', '', TRUE); -
Вы можете вручную передать настройки подключения к базе данных в качестве третьего параметра:
$config['hostname'] = 'localhost'; $config['username'] = 'myusername'; $config['password'] = 'mypassword'; $config['database'] = 'mydatabase'; $config['dbdriver'] = 'mysqli'; $config['dbprefix'] = ''; $config['pconnect'] = FALSE; $config['db_debug'] = TRUE; $this->load->model('model_name', '', $config);
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/userguide3/general/models.html