Комментарии

Метод getForm () из класса WeblinksModelWeblink
( 0 Голосов )

Для формы редактирования в методе getForm () получается объект типа JForm. Ниже в статье представлены методы, вызываемые в ходе этого процесса.

Блок-схема выполнения данного метода выглядит немного запутанной, поскольку некоторые методы вызываются из родительских классов. Класс WeblinksModelWeblink расширяет класс JModelAdmin, который, в свою очередь, расширяет класс JModelForm, а тот — класс JModel. В данном примере методы loadForm () и preprocessForm () вызываются из класса JModelForm, тогда как метод bind () — из класса JForm.

Ниже приведена первая часть исходного кода из метода getForm ().

public  function getForm($data = array (), $loadData = true)

//  инициализировать  переменные
$app = JFactory::getApplication();

//  получить  форму
$form = $this->loadForm('com_weblinks.weblink', 'weblink' array('control' => 'jform', 'load^data' => $loadData)); (empty($form)) { return  false;

В строке кода, выделенной выше полужирным, вызывается метод loadForm () из родительского класса JModelForm. В качестве первого аргумента при вызове этого метода указывается переменная $name со значением "com_weblinks. weblink", в качестве второго аргумента — переменная $ source со значением "weblink", в качестве третьего аргумента — ассоциативный массив, инициируемый непосредственно в данной строке кода. В методе loadForm () проверяется, была ли форма уже кеширована. Если она не кеширована, то выполняется приведенный ниже код из блока try/catch.

{
$form = JForm::getinstance($name, $source, $options, false, $xpath);
if (isset($options['load_data']) && $options['load_data']) {

// получить данные для формы $data =  $this->loadFormData(); j } else { $data =  array(); }
// разрешить дополнительное видоизменение формы, а также инициируемых событий // Данные передаются потому, что они могут потребоваться в подключаемых модулях. $this->preprocessForm($form, $data); j
// загрузить данные в форму после предварительной ( // обработки в подключаемых модулях > $form->bind($data); } catch (Exception $е) { $this->setError($e->getMessage()); return false; }

Если вы незнакомы с блоками try/catch, обращайтесь за справкой к приведенной далее врезке "Исключения и блоки try/catch". Метод getlnstance () выполняется в блоке try, поскольку этот метод может сгенерировать исключения, для обработки которых служит блок catch. В теле метода getlnstance () проверяется, не является ли переменная $data пустой. Эта переменная может содержать имя XML-файла или символьную строку с кодом XML для формы. Далее в методе getlnstance () проверяется первый символ из переменной $data. Если это символ <, то предполагается, что в данной переменной содержится символьная строка с кодом XML, а далее предпринимается попытка создать форму с помощью метода load () из класса JForm. В данном примере переменная $data содержит имя XML-файла weblink, и поэтому вместо метода load() из класса JForm для загрузки формы используется этот файл, а именно models/forms/weblink.xml. В обоих методах форма создается из элементов f ieldset и field разметки в коде XML. В файле weblink. xml определяются два элемента fieldset, содержащие ряд элементов разметки field. Более подробно применение элементов разметки полей для воспроизведения формы будет показано далее в этой главе, когда будут рассматриваться файлы компоновки экранной формы редактирования.

Все возникающие ошибки полностью обрабатываются в методе getlnstance (). Нужно лишь сгенерировать исключение соответствующего типа для каждого условия возникновения ошибки. А исключения обрабатываются в блоке catch вызывающего метода, как показано в приведенном выше коде. В данном случае характер ошибки устанавливается, исходя из сообщения, получаемого от объекта исключения, а затем возвращается логическое значение false.


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


 
Похожие новости
Добавить комментарий


Защитный код