Просмотры
Материал из База знаний Joomla.
Это статья из раздела Программирование для Joomla. Вернитесь в него для более полной информации.
Содержание |
Мэппинг
Мэппинг (mapping) – это преобразование PHP-объектов в строки таблиц базы данных, по заранее определенным правилам.
В Joomla есть встроенный класс для отображения классов языка PHP – mosDBTable (исходный код находится в файле /includes/database.php). Более мощным и известным аналогом является пакет Hibernate языка Java. По сути, это абстрактный класс таблиц в базе данных. Для создания класса связанного с какой-то конкретной таблицей (отображающего ее) его надо пронаследовать от этого класса и определить в классе поля, соответствующие названиям столбцов таблицы.
Использование этого механизма дает большие преимущества для разработчиков расширений. При помощи мэппинга можно:
- Автоматически принимать входные данные и не заботиться о безопасности и необходимости защиты от SQL-Injection.
- Сохранять данные при помощи вызова одного родительского метода, не тратя время на ручное создание SQL запросов типа INSERT.
- Загружать данные в класс, не создавая SELECT запрос (он будет сформирован автоматически).
Пример класса - наследника mosDBTable
Ниже приведен пример создания такого класса и вариантов его использования. Предположим, что этот класс используется для отображения таблицы, имеющей следующие поля:
- Id – идентификатор записи
- Name – имя записи
class xTable extends mosDBTable { var $id=null;//первичный ключ var $name=null;//имя записи /** * Конструктор класса. */ function myTable( &$db ) { $this->mosDBTable( '#__xtable', 'id', $db ); } }
В приведенном примере создается класс xTable наследуемый от mosDBTable. Он описывает два поля – id и name и в конструкторе определяет рабочую таблицу - #__xtable. Первичным ключом определяется поле “id”.
Теперь для работы надо создать экземпляр класса:
$param = new xTable( $database );
Загрузка данных
Для загрузки записи с определенным ключом используется метод load.
$param->load(23);
В данном примере загружается строка таблицы с идентификатором 23. Столбцы доступны как поля объекта $param, например $param->name.
Прием и проверка входных данных
Для приема входных данных используется метод bind.
if (!$param->bind( $_POST )) { echo “Ошибка"; exit(); }
Для проверки данных в пользовательском классе должен быть переопределен метод check, который в случае если все входные данные верны, должен возвратить true, в противном случае false.
function check() { if ($this->name==’’) { $this->_error = “Имя не может быть пустым”; return false; } return true; }
Вставка и обновление данных
Для сохранения данных используется метод store. Он создает SQL-запрос вставки или обновления данных. Вид запроса зависит от того, был ли во входном массиве, использованном в методе bind, определен или нет. Если нет – значит, данной записи еще не существует в таблице и данные необходимо вставить, генерируется метод INSERT. Если требуется обновить объект, то это реализуется при помощи скрытого поля <input type=’hidden’ name=’id’ value=’ID_редактируемого_поля’>, при определении данных в методе bind поле id не будет равно NULL и будет сгенерирован запрос UPDATE.
if (!$param->store()) { echo "Ошибка сохранения данных"; exit(); }
Последнее изменение этой страницы: 14:59, 27 марта 2009.



