2014-06-10 12 views
10

Mentre var_dumping il contenuto di Input:all() con laravel 4, ho notato che un input generato con il seguente codice viene ignorato dal framework:di laravel: tutti() ignora ingressi disabili

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

Ma che i seguenti lavori come previsto:

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

Ho una buona ragione per disabilitare l'utente che ha problemi con ciò che è in questo campo di input. Eppure ho bisogno di salvarlo nel database. Come dovrei farlo? Disabilitare l'attributo disabled con jQuery quando l'utente invia il modulo? È un po 'ridicolo, vero?

risposta

27

Basta cambiare disabled-readonly

+0

Ha funzionato, grazie! Non conoscevo questo attributo HTML. Accetterò la tua risposta non appena mi sarà permesso. –

+0

Perfetto! Grazie mille Rasoio! –

3

E 'una cattiva idea quella di fare affidamento su bandiere HTML come disabled o readonly. L'utente può facilmente aprire l'ispettore e modificare il valore del campo. Non esporre questo nel modello, questa è la logica aziendale che appartiene al modello!

Sei in esecuzione su Input :: all() per salvare i campi nel database? Se è così, si potrebbe scrivere qualcosa di simile:

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

Vantaggi: controlli consentito solo campi, aggiorna solo i campi presenti nella richiesta effettiva.

+3

'Input :: only (" field1 "," field2 ")' è una funzione di supporto esattamente per questo. – alexn

+0

In realtà quelle variabili che memorizzo sono valori Javascript che ottengo dall'API di geolocalizzazione di W3C. So che c'è il rischio che l'utente li cambi, ma in questo caso non posso fare a meno di Javascript, posso? –