2013-08-20 13 views
7

chcę zaktualizować mojego modelu z następującego kodu:obchodzić checkboxes na wejściu :: wszystkie() w laravel 4

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

Działa to dla wszystkich pól z wyjątkiem „Gotowe” -field która jest logiczna w tabela i reprezentowane przez pole wyboru w formularzu edycji.

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

Jak mogę obsługiwać pola wyboru z aktualizacją i wprowadzeniem: wszystkie()?

Dziękuję.

+0

Sugeruję, aby unikać używania 'Input :: all()'. W ten sposób pozwalasz każdemu, kto ma minimalną wiedzę HTML, aktualizować pola, które nie powinny być edytowalne w twoim modelu. Nawet jeśli zdefiniujesz '$ accessible' w swoim modelu, jest to zbyt ryzykowne. – vFragosop

+0

Dziękuję za radę. Mam zamiar użyć 'Input: all()' tylko dla tych modeli, które i tak użytkownik może edytować. Atrybuty, które nie powinny być edytowane przez użytkownika, będą więc chronione. – Strernd

+2

Używanie tablicy $ fillable w modelu jest dobrym pomysłem przy użyciu Input :: all(). Z dokumentacji: "Właściwość fillable określa, które atrybuty powinny być przypisywane masowo.To może być ustawione na poziomie klasy lub instancji. Odwrotność fillable jest strzeżona i służy jako" czarna lista "zamiast białej listy . " –

Odpowiedz

24

znalazłem obejście tego

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

To jest sposób na zrobienie! –

+1

Jeśli zaznaczono opcję "Gotowe", a sprawdzanie poprawności nie powiodło się, czy oba automatycznie nie wypełniłyby się 1? W następnym zgłoszeniu nie ma znaczenia, czy odznaczą to, to nadal będzie sprawdzane. Obejście problemu polegałoby na ręcznym dodaniu kodu HTML ukrytego wejścia, aby uniknąć jego wypełnienia po sprawdzeniu poprawności. – Justin

+3

Pamiętaj, że spowoduje to problem (przynajmniej w wersji Laravel 5), jeśli używasz Form :: model podczas edycji rekordu, ponieważ model automatycznie zmieni ukrytą wartość na 1, jeśli "done" zostało wcześniej ustawione na 1. Jeśli używasz '' unika wszelkich problemów z Form :: model nadpisując wartość. – alexleonard

1

Robię szybki test przed zapisaniem.

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

Wiem, że to stary, ale uważam, że ten sposób działa najlepiej przy wypełnianiu danych formularza

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

lub w przypadku PO byłoby tak:

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

Po prostu lubię to bardziej niż dodawanie ukrytego pola.