web-dev-qa-db-fra.com

Obtenir les valeurs sélectionnées à partir d’un formulaire de sélection multiple en Laravel

Pour générer une liste déroulante avec un élément sélectionné par défaut, procédez comme suit:

echo Form::select('size', array('L' => 'Large', 'M' => 'Medium', 'S' => 'Small'), 'S');

J'ai donc généré une liste déroulante dans laquelle plusieurs éléments sont sélectionnés par défaut, de la manière suivante:

echo Form::select('size', array('L' => 'Large', 'M' => 'Medium', 'S' => 'Small'), array('S', 'M'), array('multiple'));

Mais comment puis-je obtenir plusieurs valeurs sélectionnées?

Input::get('size') ne renvoie que la dernière chaîne sélectionnée.

12
SUB0DH

Tout d'abord, si vous voulez avoir plusieurs éléments sélectionnés par défaut, vous devez donner un tableau de valeurs en tant que 3ème paramètre, pas une valeur simple.

Exemple:

Form::select('size', array('L' => 'Large', 'M' => 'Medium', 'S' => 'Small'), array('S', 'M'), array('multiple'));

devrait montrer la sélection avec S et M. sélectionné.

Pour le deuxième point, vous devriez essayer de donner un nom comme size[] au lieu de size, cela pourrait résoudre le problème (car votre sélection postée n’est pas une simple valeur, c’est un tableau de valeurs)

36
MatRt

Les déclarations habituelles de sélection vont 

<select name="select_name" id="select_name" multiple="multiple">

Et le flux de travail est que Laravel obtient les éléments de formulaire par leur nom. Pour que cela fonctionne, changez le nom en tableau. 

<select name="select_name[]" id="select_name" multiple="multiple">

Ainsi, laravel obtiendra les valeurs de select sous forme de tableau de données. 

14
Farveaz

Selon/ https://laravelcollective.com/docs/5.2/html#drop-down-lists

Form::select('size[]',['L' => 'Large', 'M' => 'Medium', 'S' => 'Small'], ['S', 'M'], ['multiple' => 'multiple', 'class' => 'form-control']);

Au fait, veuillez noter le nom de la liste déroulante ( size [] ) si vous voulez pouvoir utiliser ce champ comme tableau dans votre backend.

Les choses deviennent difficiles lorsque vous voulez utiliser les relations comme valeur, par exemple 

models
user =>  common fields
size => id, name, slug  [
                         {id : 1 , name : Large, slug : L}, 
                         {id : 2 , name : Small, slug : S},
                         {id : 3 , name : Medium, slug : M}
                         ] 

user_size => id, user_id, size_id  [
                                     {id :1, user_id:1, size_id:1}
                                     {id :2, user_id:1, size_id:3}
                                   ]   

Donc $user->colors retournera quelque chose comme

laravel collection

[
  USER_SIZE => [  'user_id' => 1 , size_id' => 1 ],
  USER_SIZE => [  'user_id' => 1, 'size_id' => 3 ]
]

Vous pouvez faire quelque chose du genre, souvenez-vous que User Model a une relation sizes de un à plusieurs avec SIZE Model 

Form::select('size[]',['L' => 'Large', 'M' => 'Medium', 'S' => 'Small'], $user->sizes->pluck('size')->pluck('slug')->toArray(), ['multiple' => 'multiple', 'class' => 'form-control']);

J'espère que ça aide

1
Ismael Viamontes