2014-06-10 13 views
10

Podczas var_dumping treść Input:all() z laravel 4, zauważyłem, że wejście generowane z następującego kodu jest ignorowane przez ramy:laravel za: wszystko() ignoruje wejścia niepełnosprawnych

{{ Form::text('departure', 'Departure', array('class' => 'form-control', 'disabled')) }} 

ale następujących prac zgodnie z oczekiwaniami:

{{ Form::text('departure', 'Departure', array('class' => 'form-control')) }} 

Mam dobry powód, aby wyłączyć użytkownika z tym, co jest w tym polu wejściowym. Jednak muszę go zapisać w bazie danych. Jak mam to zrobić? Wyłączyć atrybut disabled z jQuery, gdy użytkownik przesyła formularz? To trochę niedorzeczne, prawda?

Odpowiedz

27

Wystarczy zmienić disabled do readonly

+0

Zadziałało, dzięki! Nie znałem tego atrybutu HTML. Przyjmuję twoją odpowiedź tak szybko, jak tylko będę mógł. –

+0

Idealnie! Dzięki za tonę Razor! –

3

To zły pomysł, aby polegać na flagi HTML, takich jak disabled lub readonly. Użytkownik może łatwo otworzyć inspektora i zmienić wartość pola. Nie ujawniaj tego w ogóle w szablonie, to logika biznesowa, która należy do modelu!

Czy przechodzisz przez Input :: all(), aby zapisać pola w bazie danych? Jeśli tak, możesz napisać coś takiego:

$allowedFields = ["field1", "field2", "field3" ...]; 
foreach($allowedFields as $field) { 
    if(Input::has($field) { 
     $myEloquentModel->{$field} = Input::get($field); 
    } 
} 
$myEloquentModel->save(); 

Korzyści: sprawdza tylko dozwolone pola, aktualizacje wyświetlają tylko pola w aktualnym żądaniu.

+3

'Input :: only (" field1 "," field2 ")' jest funkcją pomocniczą dla tego. – alexn

+0

W rzeczywistości te zmienne, które przechowuję, są wartościami Javascript, które otrzymuję z interfejsu API geolokalizacji W3C. Wiem, że istnieje ryzyko, że użytkownik je zmieni, ale ja nie mogę bez JavaScriptu w tym przypadku, prawda? –

Powiązane problemy