2 votes

CakePHP - input select ne prend pas les options de sélection d'une variable

Je développe une application avec CakePHP 2.3.2 et j'ai des problèmes avec la sélection d'une entrée dans un formulaire. Je crée un tableau, dans mon contrôleur, qui contient une liste d'états. Dans ma vue, je constate que lorsque j'utilise cette variable dans le champ 'options' de l'entrée, je n'obtiens aucune option de sélection. Si je fais un print_r sur la variable, dans la vue, je vois exactement ce que je pense devoir voir pour le champ 'options'. J'ai même essayé de copier cette sortie print_r et de la placer dans le champ "options" et la sélection de l'entrée fonctionne alors correctement.

Voici ce que j'ai

Dans le contrôleur

$options = 'array(1 => \'NSW\',2 => \'ACT\',3 => \'NT\');
$this->set('all_states, $options);

En vue

<?php
$options = $all_states;

echo $this->Form->create('Refine', array('url => '/ServiceDirectoryResults/view/refine'));

echo $this->Form->input('field' ,array(
   'type' => 'select',
   'label' => false,
   'options' => $options
));

echo $this->Form->end('Refine Search');

?>

Lorsque j'exécute ce programme, je vois une sélection sans aucune option de sélection.

Si j'ajoute print_r($options) après echo $this->Form->end('Refine Search') ; je vois

array(1 => 'NSW',2 => 'ACT,3 => 'NT')

C'est ce à quoi je m'attendais puisque c'est le contenu de la variable $options qui était la variable $all_states passée par le contrôleur. Si je prends cette sortie du print_r et que je remplace la variable $option par celle-ci dans l'entrée select, le menu déroulant select fonctionne correctement et je vois les trois options. Pour une raison que je n'arrive pas à comprendre, la sélection fonctionne bien si je code en dur les options de sélection, mais elle ne fonctionne pas si je passe une variable contenant le tableau à l'entrée de la sélection.

J'apprécierais vraiment que quelqu'un me donne un indice sur ce que je fais de travers.

Cordialement, je vous prie d'agréer, Madame, Monsieur, l'expression de mes salutations distinguées.

Richard

2voto

liyakat Points 7894

Vous pouvez essayer comme ci-dessous :

echo $this->Form->input('field', array('type'=>'select','label' => false,
   'options' => $options,'default'=>'2'));

pour que le code HTML suivant soit généré :

<option value="2" selected="selected">ACT</option>

l'option deux est affichée à la place de toute autre option.

0voto

Dave Points 14168

Problèmes probables :

Les tableaux ne doivent pas être constitués de chaînes de caractères comme vous l'avez fait :

$options = 'array(1 => \'NSW\',2 => \'ACT\',3 => \'NT\');

Au lieu de cela, il suffit de créer un tableau :

$options = array(1 => 'NSW', 2 => 'ACT', 3 => 'NT');

Autres notes :

  • Pourquoi mettre en place $options a $all_states pour ensuite la faire reculer ?
  • Des guillemets manquants partout - assurez-vous que si vous commencez des guillemets, vous les terminez également.
  • ce n'est pas une bonne pratique de coder en dur vos URLs (comme dans votre formulaire->créer)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X