Salut,

Mon problème est de passer les options dans un select.

Car ma liste s'affiche mais j'ai quand même un message d'erreur : "Array to string conversion in \core\Form.php on line 31"

Dans un admin_edit, je souhaite faire apparaître une liste de couleurs dans un select.

(J'ai mis la liste des couleurs dans un tableau $couleurs)

<FORM action="<?php echo Router::url('admin/images/edit/'.$image->id);?>" method="post">
        <?php $couleurs=array('jaune'=>'jaune','orange'=>'orange','rouge'=>'rouge');
        echo $this->Form->input('couleur','Couleur',array('type'=>'select','option'=>$couleurs)); ?>

PS: je ne suis pas débutant, ça fait trop longtemps... Juste trop nul pour trouver tout seul.
Merci à l'auteur du site !
Merci d'avance à tous.

5 réponses


philippe78
Auteur
Réponse acceptée

Merci Wilose. J'ai essayé et j'ai trouvé un peu différemment car tu m'as mis sur la piste :

$attr .= " $k=\"$k\"";

En gardant cette forme pour les couleurs afin d'enregistrer les couleurs elles même:

$couleurs=array('jaune'=>'jaune','orange'=>'orange','rouge'=>'rouge',''=>'aucune');

Un GRAND MERCI

Bonjour,
Essais ça:

<form action="<?php echo Router::url('admin/images/edit/' . $image->id); ?>" method="post">
<?php
    $couleurs = array(
        'jaune', 'orange', 'rouge'
    );
    echo $this->Form->input('couleur', 'Couleur', array(
        'type' => 'select','option' => $couleurs
    ));
?>

Merci Wilose pour ta réponse, mais ça fait la même erreur.
J'avais commencé par là. Mais il m'enregistre un chiffre dans la base qui est la position de la couleur dans la liste et pas le nom de la couleur. D'où la forme

$couleurs=array('jaune'=>'jaune',...

Depuis j'ai avancé et réussi à intégrer la taille de la liste :

$couleurs=array('jaune'=>'jaune','orange'=>'orange','rouge'=>'rouge',''=>'aucune'); 
      echo $this->Form->input('couleur_principale','Couleur principale',
                       array('type'=>'select','size'=>4,'option'=>$couleurs));

Je remets le code de la fonction input dans le Form.php, l'erreur est ici à la ligne 21 :

public function input($name,$label,$options = array()){
        $error = false; 
        $classError = ''; 
        if(isset($this->errors$name])){
            $error = $this->errors$name];
            $classError = ' error'; 
        }
        if(!isset($this->controller->request->data->$name)){
            $value = ''; 
        }else{
            $value = $this->controller->request->data->$name; 
        }
        if($label == 'hidden'){
            return '<input type="hidden" name="'.$name.'" value="'.$value.'">'; 
        }
        $html = '<div class="clearfix'.$classError.'">
                    <label for="input'.$name.'">'.$label.'</label>
                    <div class="input">';
        $attr = ' '; 
        foreach($options as $k=>$v){ if($k!='type'){
            $attr .= " $k=\"$v\""; 
        }}
        if(!isset($options'type']) && !isset($options'options'])){
            $html .= '<input type="text" id="input'.$name.'" name="'.$name.'" value="'.$value.'"'.$attr.'>';
        }elseif($options'type'] == 'select'){
            $html .= '<select id="input'.$name.'" name="'.$name.'"';
            $html .= isset($options'size'])?' size="'.$options'size'].'"':'';
                        $html .= '">';
            foreach($options'option'] as $k=>$v):{
                            $html .= '<option value="'.$k.'"'.($k==$value?' selected':'').'>'.$v.'</option>';}
                        endforeach;
            $html .= '</select>';

C'est bien le numéro qui doit s'afficher, parce que $k est la clef de l'array, mais si tu veut la couleur:

$attr .= " $v=\"$v\"";

Et utilise l'array simple:

$couleurs = array('jaune', 'orange', 'rouge');

Je post ici car je souhaite aussi utiliser Form.php pour les input de type select et je voulais savoir une réponse au problème a était trouvé?

edit: Désolé d'avoir posé la question, j'ai bossé dessus et j'ai trouvé.