Модели
Модели опционально доступны для тех, кто хочет использовать более традиционный MVC подход.
Содержание страницы
Что такое модель?
Модели - это PHP классы, которые предназначены для работы с информацией в вашей базе данных. Например, предположим, что вы используете CodeIgniter для управления блогом. У вас может быть класс модели, который содержит функции для вставки, обновления и извлечения данных вашего блога. Вот пример того, как может выглядеть подобная модель класса:
class Blog_model extends CI_Model {
public $title;
public $content;
public $date;
public function __construct()
{
// Call the CI_Model constructor
parent::__construct();
}
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']));
}
}
Примечание
Способы, описанные в приведенном выше примере используют Квери билдер (конструктор запросов) базы данных методов.
Примечание
Для простоты в этом примере мы используем $_POST напрямую. Это вообще плохая практика, и более качественный подход может быть при использовании Входной библиотеки $this->input->post('title').
Анатомия модели
Классы моделей хранятся в application/models/ папке. Они могут быть вложенными в подкаталоги, если Вы хотите использовать этот тип организации.
Базовый прототип для модели класса:
class Model_name extends CI_Model {
public function __construct()
{
parent::__construct();
}
}
Где Model_name имя класса. Имена классов должны иметь первую букву заглавной, а осталные в нижнем регистре. Убедитесь, что Ваш класс расширяет основной класс модели.
Имя файла должно совпадать с именем класса. Например, если класс:
class User_model extends CI_Model {
public function __construct()
{
parent::__construct();
}
}
Ваш файл будет таким:
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 файла и добавления модели в массив автозагрузки.
Подключение к БД
Когда модель загружена она НЕ подключается к БД автоматически. Следующие опции доступны для ее подключения:
Вы можете подключиться с помощью стандартных методов базы данных которые описаны тут, либо в класса контроллера или классе модели.
Вы можете указать модели в методе для автоматического подключения, передав значение 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);