Разработка модели
Модель строится для заранее разработанной базы данных. Модель представляет собой библиотеку содержащую класс, методы которого выполняют основные действия над базой данных. Вызов этих методов осуществляется из компонентов поведения.
В данном проекте эта библиотека называется Subject.php, для ее загрузки в конструкторе класса Zend_Controller_Action вызывается метод init() класса поведения adminController, являющегося расширением Zend_Controller_Action (листинг 4.1).
Листинг 4.1 – Загрузка модели «Subject.php» классом поведения
class indexController extends Zend_Controller_Action
{
. . . .
function init()
{
$this->view->baseUrl = $this->_request->getBaseUrl();
Zend_Loader::loadClass('Subject');
}
}
После того как модель была загружена, во всех методах action контроллера indexController создается объект Subject, экземпляр которого необходим для вызова методов, которые будут производить различные действия над БД. Пример функции для получения названия курса по идентификатору лекции приведен в листинге 4.2.
Листинг 4.2 – Функция класса Subject для получения названия курса по идентификатору лекции.
class Subject extends Zend_Db_Table_Abstract
{
. . . . . . . . .
public function getSubjNameByLecId($id)
{
$select = $this->_db->select()
->from('lection_lecture')
->join('lection_subject', 'lection_lecture.lection_subject_id =
lection_subject.lection_subject_id')
->where('lection_lecture.lection_lecture_id = ?', $id);
$result = $select->query()->fetchAll();;
return $result[0]['subject'];
}
В классе Subject собраны множества функций, необходимых для манипуляции БД, полный список представлен в «Приложение А».
Для ассоциации БД с классом Subject был создан экземпляр класса Zend_Db, который является объектом адаптера БД(листинг 4.3)
Листинг 4.3. – Создание объекта адаптера БД
Zend_Loader::loadClass ( 'Zend_Db' );
$params = array (
'host' => 'localhost',
'username' => 'root',
'password' => 'pass',
'dbname' => 'diplom');
$db = Zend_Db::factory ( 'Pdo_Mysql', $params );
Zend_Db_Table_Abstract::setDefaultAdapter ( $db );
Статический метод factory имеет два аргумента, первый указывает на использование класса Zend_Db_Adapter_Pdo_Mysql (т.к. используется MySQL), а второй передастся конструктору класса Zend_Db, который имеет единственный аргумент, являющимся массивом параметров для описания соединения с БД.
Декларирование объекта Zend_Db_Adapter_Abstract означает использование адаптера $db по умолчанию для всех экземпляров таблиц. В результате созданный класс Subject является объектно-ориентированным интерфейсом к таблицам баз данных.
Pdo Mysql(PHP Data Objects MySQL) - является общим расширением PHP, служит предоставления общего интерфейса между СУРБД и разработанным приложением на PHP[7].Для использования Pdo MySLQ была использована библиотека pdo_my.iso, которая была подключена в конфигурационном файле PHP. |