2010-12-12 28 views
1

Je suis confronté à un problème bizarre. je le modèle Config, en collaboration avec ces associations:CakePHP: Décalage chaîne non initialisé: 0 en vue

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' => '' 
    ), 
); 

Dans mon ConfigsController je l'action 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')); 
} 

Et dans mon edit.ctp vue, j'ai:

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

Maintenant, voici le problème: Le groupe est correctement sélectionné, mais les deux autres (webmaster et lang uage) sont reseted sur la première option, ont passelected attribut, et comme un « bonus », la langue affiche sélectionnez cette erreur: Notice (8): Uninitialized string offset: 0 [CORE/cake/libs/view/helper.php, line 859]

Je me suis battu pendant près de 2 heures et ne pouvait pas trouver le isuue pour cette problème bizarre. Pourrais-tu m'aider s'il te plaît? Je vous remercie!

EDIT

C'est ce que le débogueur montre:

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

Aide :: valeur() - CORE/cake/libs/view/helper.php, ligne 712 :: Aide _initInputField() - CORE/gâteau/libs/view/helper.php, ligne 753 FormHelper :: _ initInputField() - CORE/gâteau/libs/view/helpers/form.php, ligne 2182 FormHelper :: select() - CORE/gâteau/libs/vue/helpers/form.php, ligne 1438 FormHelper :: entrée() - CORE/gâteau/l ibs/view/helpers/form.php, ligne 882 include - APP/views/configs/edit.ctp, ligne 10 Voir :: _ render() - CORE/cake/libs/view/view.php, ligne 723 Vue :: render() - CORE/gâteau/libs/view/view.php, ligne 419 Controller :: render() - CORE/gâteau/libs/controller/controller.php, ligne 913 Dispatcher :: _ invoke() - CORE/gâteau/Dispatcher.php, ligne 207 Dispatcher :: dispatch() - CORE/gâteau/Dispatcher.php, ligne 171 [principale] - APP/Webroot/index.php, ligne 83

Et l'onglet 'code':

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

(Cliquez sur "Notice (8)" pour l'ouvrir> Puis cliquez sur "Code") Cela pourrait même vous aider à trouver la solution. – RabidFire

+0

J'ai modifié la question. J'ai essayé de comprendre quel était le problème de ce que le débogueur montrait, mais je ne pouvais pas. – linkyndy

+0

Pourriez-vous nous montrer la ligne 10 de configs/edit.ctp? – RabidFire

Répondre

1

Vous pouvez utiliser la pièce de code suivante dans votre vue au lieu:

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)); 

Cela créerait un « select » déroulante pour chacun, et de les associer correctement les champs correspondants. Donnez-nous la trace de pile de votre erreur.

+0

Cela fonctionne! Merci beaucoup! Mais encore, avez-vous une idée pourquoi cela n'a fonctionné que "moitié" avec le code que j'avais? Cela me semble très étrange. – linkyndy