CakePHP: смещение неинициализированной строки: 0 в представлении - PullRequest
1 голос
/ 12 декабря 2010

Я имею дело со странной проблемой.У меня есть модель Config вместе с этими ассоциациями:

var $belongsTo = array(
    'Language' => array(
        'className' => 'Language',
        'foreignKey' => 'default_language',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
    'Webmaster' => array(
        'className' => 'User',
        'foreignKey' => 'webmaster',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
    'Group' => array(
        'className' => 'Group',
        'foreignKey' => 'default_group',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
);

В моем ConfigsController у меня есть действие edit():

function edit($id = null) {
    if (!$id && empty($this->data)) {
        $this->Session->setFlash(__('Invalid config', true));
        $this->redirect(array('action' => 'index'));
    }
    if (!empty($this->data)) {
        if ($this->Config->save($this->data)) {
            $this->Session->setFlash(__('The config has been saved', true));
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The config could not be saved. Please, try again.', true));
        }
    }
    if (empty($this->data)) {
        $this->data = $this->Config->read(null, $id);
    }
    $languages = $this->Config->Language->find('list');
    $webmasters = $this->Config->Webmaster->find('list');
    $groups = $this->Config->Group->find('list');
    $this->set(compact('languages', 'groups', 'webmasters'));
}

И в моем edit.ctpпросмотр, у меня есть:

echo $this->Form->input('Language');
echo $this->Form->input('Webmaster');
echo $this->Form->input('Group');

Теперь вот проблема: группа выбрана правильно, но две другие (веб-мастер и язык) сбрасываются при первом варианте, имеют нет selected атрибут, и в качестве «бонуса» выбранный язык отображает эту ошибку: Notice (8): Uninitialized string offset: 0 [CORE/cake/libs/view/helper.php, line 859]

Я боролся почти 2 часа и не смог найти решение этой странной проблемы.Не могли бы вы мне помочь?Спасибо!

РЕДАКТИРОВАТЬ

Вот что показывает отладчик:

Helper::__selectedArray() - CORE/cake/libs/view/helper.php, line 859

Helper :: value () - CORE / cake / libs/view/helper.php, строка 712 Helper :: _ initInputField () - CORE / cake / libs / view / helper.php, строка 753 FormHelper :: _ initInputField () - CORE / cake / libs / view / helpers / form.phpстрока 2182 FormHelper :: select () - CORE / cake / libs / view / helpers / form.php, строка 1438 FormHelper :: input () - CORE / cake / libs / view / helpers / form.php, строка 882 включает- APP / views / configs / edit.ctp, строка 10 View :: _ render () - CORE / cake / libs / view / view.php, строка 723 View :: render () - CORE / cake / libs / view / view.php, строка 419 Controller :: render () - CORE / cake / libs / controller / controller.php, строка 913 Dispatcher :: _ invoke () - CORE / cake / dispatcher.php, строка 207 Dispatcher :: dispatch () -CORE / cake / dispatcher.php, строка 171 [главная] - APP / webroot / index.php, строка 83

И на вкладке «Код»:

 if (!empty($data)) {
        foreach ($data as $var) {
            $array[$var[$key]] = $var[$key];

1 Ответ

1 голос
/ 13 декабря 2010

Вместо этого вы можете использовать следующий фрагмент кода:

echo $this->Form->input('default_language', array('options' => $languages));
echo $this->Form->input('webmaster', array('options' => $webmasters));
echo $this->Form->input('default_group', array('options' => $groups));

Это создаст раскрывающийся список "select" для каждого и правильно сопоставит их с соответствующими полями.

...