2013-11-23 15 views
16

Sto provando a vedere se una casella di controllo è selezionata o meno nel mio controller. Ho letto che questo è il codice per farloLaravel 4, come verificare se una casella di controllo è selezionata?

if (Input::get('attending_lan', true)) 

Ma che restituisce true anche se la casella di controllo è deselezionata.

+2

'ingresso :: get ('attending_lan', false)' avrebbe funzionato, o 'ingresso :: get ('attending_lan', '0')' – Mei

risposta

14

Supponendo di avere il codice del modulo nella vista:

// view.blade.php 
{{ Form::open() }} 
    {{ Form::checkbox('attending_lan', 'yes') }} 
    {{ Form::submit('Send') }} 
{{ Form::close() }} 

È possibile ottenere il valore della casella di controllo in questo modo:

if (Input::get('attending_lan') === 'yes') { 
    // checked 
} else { 
    // unchecked 
} 

La chiave qui è che è necessario impostare un valore quando si crea la casella di controllo nella propria vista (nell'esempio, il valore sarebbe yes), quindi verificare tale valore nel controller.

+0

Grazie, ha funzionato perfettamente. –

+1

Va anche notato che se attending_lan è deselezionato, non si otterrà un errore. Questo differisce dal PHP standard, dove se si interroga un non selezionato attending_lan si ottiene una variabile non trovata. – Puzbie

27

Usa Input::has('attending_lan')

In generale, se la casella è selezionata, la variabile richiesta di esisterà. Se questo non è il caso, hai un problema da qualche altra parte nel codice.

anche relavant: Does <input type="checkbox" /> only post data if it's checked?

+3

Questo è l'approccio migliore –

+0

Questo ha risolto il mio problema con Laravel 'remember_me' al login. –

+0

Soluzione perfetta – garrettendi

-2

Un'alternativa è quello di verificare la chiave dell'array per vedere se esiste, dato che quando non selezionato un ingresso :: get ('chiave') potrebbe dare problemi dato il suo indice non definito nell'array di input.

$input = Input::all(); 
if(array_key_exists($input('key',$input)){ 
// Checked 
}else{ 
// Not Checked 
} 

Oppure .. qualcosa del genere. Sono un po 'sciatto ma spero che possa aiutare qualcuno.

-1
if(filter_var(Input::get('attending_lan'), FILTER_VALIDATE_BOOLEAN)){ 

Il filtro FILTER_VALIDATE_BOOLEAN convalida valore come opzione booleana.

Possibili valori di ritorno:

  • Restituisce vero per "1", "vero", "On" e "sì", e le versioni maiuscole.
  • Restituisce FALSE per "0", "false", "off" e "no", e versioni maiuscole.
  • Restituisce NULL altrimenti.

fonte: http://www.w3schools.com/php/filter_validate_boolean.asp

Problemi correlati