Я пытался сохранить данные формы в БД. В функции save() контроллера появляется сообщениеJRegistry exists() возвращает пустой массив
$data = $model->validate($form, $data);
Но оно всегда возвращает пустое. Я отследил проблему до функции filter() в /libraries/joomla/form/form.php (поставляется с пакетом joomla). Вот код (сокращенный):
$input = new JRegistry($data);
$output = new JRegistry;
foreach ($fields as $field)
{
// Initialise variables.
$name = (string) $field['name'];
if ($input->exists($name)){
$output->set($name, $this->filterField($field, $input->get($name, (string) field['default'])));
}
}
$ вход выглядит следующим образом:
JRegistry Object ([data:protected] => stdClass Object ([jform] => stdClass Object ([title] => Utility Model/Patent application [ap_name] => d ...) [option] => com_eipoapplications [task] => save))
И каждый $ имя в цикле всегда содержат имя элемента формы (например, 'название', 'ap_name'. ..). Но условная инструкция if всегда возвращает false. Помогает ли кто-нибудь узнать, почему функция JRegistry exists() не находит элементы?
Благодарим вас за комментарий. Позвольте мне добавить дополнительную информацию. – Bere
Если вы не используете native [JControllerLegacy-> save] (https://github.com/joomla/joomla-cms/blob/master/libraries/legacy/controller/form.php#L550), убедитесь, что '$ data 'правильно заполняется из сообщения:' $ data = $ this-> input-> post-> get ('jform', array(), 'array'); 'и имя управления формой в модели -' jform' –
$ data выглядит следующим образом: 'Array ([jform] => Array ([title] => Utility Model/Patent application [ap_name] => d'. Я думаю, что проблема заключается в том, что JRegistry добавляет еще один слой объекта и помещает jform в [data: защищенный]. Этот слой делает элементы формы (например, заголовок) скрытыми от функции JRegistry exists(). Есть ли другой способ? – Bere