Комментарии

Табличный метод bind ()
( 0 Голосов )

Этот метод принимает в качестве аргумента ассоциативный массив или объект и загружает каждый его элемент в поле объекта типа JTable. Например, в результате считывания строки из таблицы #weblinks образуется ассоциативный массив в следующей строке кода из метода JTable:: load ():

$row =  $this->_db->loadAssoc();

Этот массив содержит ключ к каждому столбцу таблицы со значением, равным значению из загруженной строки таблицы. Ниже приведена последняя строка из рассматриваемого здесь метода.

return $this->bind($row);

Метод bind () загружает все значения из массива в поля объекта типа JTable. Для каждого столбца таблицы в классе JTable имеется отдельное поле. Эти поля создаются в конструкторе класса JTable. А поскольку класс WeblinksTableWeblink расширяет класс JTable, то остается лишь запрограммировать те действия, которые являются особенными для данной таблицы. Именно это и делается в методе bind ().

Особая обработка, которую приходится выполнять в классе WeblinksTableWeblink, относится к столбцам params и metadata таблицы # weblinks. Если в таблице имеет
ся однозначное соответствие ее столбцов полям из класса JTable, то для такой обработки достаточно воспользоваться методом bind () из этого класса. Но в столбцах params и metadata данные сохраняются в виде символьных строк формата JSON. Напомним, что символьные строки формата JSON позволяют сохранить в одном столбце базы данных несколько параметров. Это означает, что параметры можно добавлять и удалять, не изме няя структуру таблицы в базе данных. Хотя это и требует некоторых затрат: прежде чем воспользоваться значениями в коде, их придется распаковать в более пригодный формат.

Распаковка происходит в методе getItem () из класса WeblinksModelWeblink. Сначала в этом методе вызывается метод getltem () из родительского класса JModelAdmin, преобразующий символьную строку формата JSON из столбца params в массив с помощью метода toArray () из класса JRegistry. А после возврата в метод getltem () из класса WeblinksModelWeblink то же самое происходит с данными из столбца metadata. Это позволяет обрабатывать отдельные поля с символьными строками формата JSON как элементы массива средствами класса WeblinksTableWeblink.

Когда же наступает момент записи строки назад в таблицу # weblinks, приходится выполнять обратную операцию, преобразуя элементы массива в символьные строки
формата JSON. И это делается в приведенном ниже фрагменте кода из метода bind (), вызываемого из класса WeblinksTableWeblink.

function bind($array, $ignore ='') {
(isset($array['params']) && is_array($array['params']))   {
$registry = new JRegistry();
$registry->loadArray($array['params']);
$array['params*] = (string)$registry;
(isset($array['metadata']) &&  is_array($array['metadata']))    {
$registry = new JRegistry();
$registry->loadArray($array['metadata']);
$array['metadata'] = (string)$registry; }
return parent::bind($array, $ignore); }

В этом методе переменная $ array содержит ассоциативный массив полей данных для таблицы #weblinks. В качестве ключа к этому массиву служит имя столбца, а в ка
честве значения — конкретное значение, записываемое обратно в базу данных. В коде данного метода проверяется наличие массива в элементе массива $array ['params']. Если такой массив имеется, он преобразуется сначала в объект типа JRegistry, а затем обратно в символьную строку формата JSON с помощью метода toString () из класса JRegistry. Напомним, что для приведения объекта к типу символьной строки с помощью оператора (string) для данного объекта вызывается метод toString ().

Та же самая последовательность действий повторяется для преобразования метаданных из массива в символьную строку формата JSON. И в последней строке кода из рассматриваемого здесь метода вызывается метод bind() из родительского класса, что очень важно, поскольку именно здесь выполняется остальная часть обработки, относящаяся к привязке других столбцов к табличному объекту.


Понравился материал? Пригодилась информация? Плюсани в социалки!


 
Похожие новости