Модели (Models)
- Автор mityok on мая 5th, 2008
Использование моделей не обязательно и реализовано для тех, кто предпочитает использовать традиционный MVC-подход.
Что такое модель?
Модель - PHP-класс спроектированный для работы с информацией, которая храниться в базе данных. Допустим, вы используете CodeIgniter для разработки блога. Вам может понадобиться класс модели который будет содержать функции для добавления, изменения и чтения данных блога. Вот пример того, как может выглядеть такой класс:
class Blogmodel extends Model { var $title = ''; var $content = ''; var $date = ''; function Blogmodel() { // Call the Model constructor parent::Model(); } function get_last_ten_entries() { $query = $this->db->get('entries', 10); return $query->result(); } function insert_entry() { $this->title = $_POST['title']; $this->content = $_POST['content']; $this->db->insert('entries', $this); } function update_entry() { $this->title = $_POST['title']; $this->content = $_POST['content']; } }
Примечание: код примера использует функциональность _Active Record_.
Состав модели
Классы модели храняться в каталоге application/models. Они могут быть сгруппированы в под-каталоги если вам необходим такой тип организации исходного кода. Базовый прототип класса модели:
class Model_name extends Model { function Model_name() { parent::Model(); } }
Здесь Model_name - имя класса модели. Имена классов модели обязательно должны начинаться с заглавной буквы, остальные буквы названия класса должны быть строчными. Класс модели обязательно должен быть потомком класса Model
Имя файла с классом модели должно быть именем класса модели в нижнем регистре.Например, для класса:
class User_model extends Model { function User_model() { parent::Model(); } }
Имя файла должно быть: application/models/user_model.php
Загрузка модели
Модели в вашем приложении как правило будут использоваться в функциях контроллера. Для того, чтобы загрузить модель вам понадобиться использовать следующую функцию:
$this->load->model('Model_name');
Если ваш класс модели расположен в под-каталоге, понадобиться указать относительный путь от каталога models. К примеру, если класс модели расположен 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 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
Подключение к базе данных
При загрузке класса модели автоматическое подключение к базе данных не осуществляется. Для подключения возможны следующие варианты:
- Вы можете воспользоваться _стандартным способом_ подключения к базе данных, либо из контроллера, либо из класса модели.
- Вы можете указать функции загрузки модели автоматически выполнить подключение к базе данных, задав 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);

Отправить комментарий