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