2013-05-23 3 views
0

Я пытался сохранить данные формы в БД. В функции 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() не находит элементы?

ответ

0

Я думаю, что у вас есть несоответствие между формой и данными.

Скажем, форма содержит поле с именем title. $ массива данных должен иметь значение под ключом же имя:

$data = array(
    'title' => 'Utility Model/Patent application', 
    'ap_name' => 'd' 
); 

Или с помощью print_r

Array 
(
    [title] => Utility Model/Patent application 
    [ap_name] => d 
) 

Если нет никаких данных для такого поля, проверка опущена. Если все ключи данных ошибочны, функция возвращает пустой массив.

Вопрос в том, как это произошло:/

+0

Благодарим вас за комментарий. Позвольте мне добавить дополнительную информацию. – Bere

+0

Если вы не используете 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' –

+0

$ data выглядит следующим образом: 'Array ([jform] => Array ([title] => Utility Model/Patent application [ap_name] => d'. Я думаю, что проблема заключается в том, что JRegistry добавляет еще один слой объекта и помещает jform в [data: защищенный]. Этот слой делает элементы формы (например, заголовок) скрытыми от функции JRegistry exists(). Есть ли другой способ? – Bere

Смежные вопросы