Модели
Модели опционально доступны для тех, кто хочет следовать более традиционному MVC.
- Что такое модель?
- Анатомия модели
- Загрузка модели
- Автозагрузка модели
- Соединение с вашей базой данных
Что такое модель?
Модели — это классы PHP, которые построены для работы с информацией в базе данных. Например, давайте предположим, что вы используете CodeIgniter для управления блогом. Вы можете иметь класс модели, который содержит функции для вставки, обновления и получения данных вашего блога. Вот пример того, как может выглядеть класс модели:
class Blogmodel extends CI_Model {
var $title = '';
var $content = '';
var $date = '';
function __construct()
{
// Call the Model constructor
parent::__construct();
}
function get_last_ten_entries()
{
$query = $this->db->get('entries', 10);
return $query->result();
}
function insert_entry()
{
$this->title = $_POST['title']; // please read the below note
$this->content = $_POST['content'];
$this->date = time();
$this->db->insert('entries', $this);
}
function update_entry()
{
$this->title = $_POST['title'];
$this->content = $_POST['content'];
$this->date = time();
$this->db->update('entries', $this, array('id' => $_POST['id']));
}
}
Примечание: функции в примере выше используют функции Active Record.
Примечание: Для простоты в этом примере мы используем $_POST напрямую. Это плохая практика, и более общий подход заключается в использовании класса Input $this->input->post('title')
Анатомия модели
Классы моделей хранятся в вашей директории application/models/. Они могут быть организованы в поддиректориях, если вы так предпочитаете.
Основной прототип класса модели таков:
class Model_name extends CI_Model {
function __construct()
{
parent::__construct();
}
}
Где Model_name — это имя вашего класса. Имена классов должны начинаться с большой буквы. Убедитесь в том, что ваш класс расширяет основной класс Model.
Имя файла должно быть в нижнем регистре и соответствовать имени класса. Например, если ваш класс:
class User_model extends CI_Model {
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->function();
Если вы хотите, чтобы при загрузке модель была ассоциирована с другим именем объекта, передайте его вторым параметром в загружающую функцию:
$this->load->model('Model_name', 'fubar');
$this->fubar->function();
Вот пример контроллера, который загружает модель, затем обслуживает отображение:
class Blog_controller extends CI_Controller {
function blog()
{
$this->load->model('Blog');
$data['query'] = $this->Blog->get_last_ten_entries();
$this->load->view('blog', $data);
}
}
Автозагрузка моделей
Если вы нашли, что вы нуждаетесь в конкретной модели глобально во всем вашем приложении, вы можете сказать CodeIgniter, чтобы он загружал ее автоматически при инициализации системы. Это можно сделать, открыв файл application/config/autoload.php и добавив модель в список.
Примечание переводчика: исследуйте комментарии в файле 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'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$this->load->model('Model_name', '', $config);