2013-08-20 10 views
7

voglio aggiornare il mio modello con codice seguente:caselle di controllo Maniglia in ingresso :: tutti() in laravel 4

$feature = Feature::find($id)->update(Input::all()); 

Questo funziona per tutti i campi ad eccezione del -field "fatto", che è un valore booleano nel tabella e rappresentata dalla casella di controllo nel modulo di modifica.

{{ Form::label('done', 'Done?')}} 
{{ Form::checkbox('done',1)}} 

Come posso gestire le caselle di controllo con l'aggiornamento e Input: all()?

Grazie.

+0

Suggerisco di evitare l'uso di 'Input :: all()'. In questo modo, stai consentendo a chiunque abbia una conoscenza minima dell'HTML di aggiornare campi che non dovrebbero essere modificabili sul tuo modello. Anche se definisci $ accessibile dal tuo modello, è troppo rischioso. – vFragosop

+0

Grazie per questo consiglio. Userò 'Input: all()' solo per quei modelli, che l'utente può comunque modificare. Gli attributi che non dovrebbero essere modificati dall'utente saranno quindi protetti. – Strernd

+2

L'uso dell'array $ fillable nel modello è una buona idea quando si utilizza Input :: all(). Dalla documentazione: "La proprietà fillable specifica quali attributi dovrebbero essere assegnabili in serie.Può essere impostato a livello di classe o di istanza.L'inverso di fillable è protetto e funge da" lista nera "anziché da una white-list ". –

risposta

24

ho trovato una soluzione per questo

{{ Form::hidden('done', 0); }} 
{{ Form::checkbox('done', 1); }} 
+0

Questo è il modo di fare! –

+1

Se è stato selezionato 'done' e la convalida non è riuscita, non saranno entrambi riempiti automaticamente con 1? Quindi il prossimo invio non avrebbe importanza se lo deselezionassero, lo si vedrebbe comunque come controllato. Una soluzione alternativa sarebbe quella di aggiungere manualmente l'HTML per l'input nascosto per evitare che venga popolato dopo la convalida. – Justin

+3

Nota ciò causerà un problema (almeno in Laravel 5) se si utilizza il modello Form :: quando si modifica il record, in quanto il modello modificherà automaticamente il valore nascosto su 1 se "done" è stato precedentemente impostato su 1. Se si usa '' evita qualsiasi problema con Form :: model che sostituisce il valore. – alexleonard

1

Sto facendo un rapido controllo prima di salvare.

if(!Input::get('someCheckbox')) $feature->someCheckbox = 0; 
1

So che questo è vecchio, ma ho trovato in questo modo funziona meglio quando la compilazione dei dati del modulo

$myModel->fill(array_merge(['checkBoxName1'=>'0','checkBoxName2'=>'0'], $request->all())); 

o in caso del PO sarebbe come questo:

$feature = Feature::find($id)->update(array_merge(['checkBoxName1'=>'0','checkBoxName2'=>'0'],Input::all())); 

Mi piace molto di più che aggiungere un campo nascosto.

Problemi correlati