2013-03-12 15 views
12

per generare un elenco a discesa con una voce selezionata per impostazione predefinita, viene eseguita la seguente:ottenere selezionati i valori da una forma di selezione multipla in laravel

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

Così ho generato un elenco a discesa che ha più di un elemento selezionato per impostazione predefinita, nel modo seguente:

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

Ma come si ottengono più di un valore selezionato?

Input::get('size') restituisce solo l'ultima stringa selezionata.

risposta

35

Innanzitutto, se si desidera che più elementi siano selezionati per impostazione predefinita, è necessario fornire un array di valori come 3 ° parametro, non un valore semplice.

Esempio:

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

dovrebbe mostrare select con S e M selezionata.

Per il secondo punto, si dovrebbe cercare di dare un nome come size[] invece di size, potrebbe essere risolvere il problema (perché il vostro inviato selezionare non è un valore semplice, la sua un array di valori)

+7

Grazie per la risposta. Usare 'size []' invece di 'size' ha fatto ciò che avevo inteso. – SUB0DH

13

Solita Seleziona dichiarazioni vai

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

E il flusso di lavoro è che Laravel ottiene gli elementi del modulo con il loro nome. Per farlo funzionare, cambiare il nome in un array.

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

Questo renderà laravel ottenere i valori di select come una matrice di dati.

1

Secondo con 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']); 

A proposito, si prega di notare il nome di discesa (dimensioni []) se si vuole essere in grado di utilizzare questo campo come array in backend.

Le cose si fanno difficili quando si desidera utilizza relazioni come valore, per esempio

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} 
            ] 

Così $user->colors restituirà qualcosa come

laravel collection 

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

Si potrebbe fare qualcosa di simile, ricorda User Model hanno un sizes rapporto di uno a molti con SIZE Model

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

Spero che sia utile

Problemi correlati