checkbox - collective - laravel form example
casilla de verificación sin marcar con "Entrada:: vieja()" (8)
Yo tuve el mismo problema. Termino creando esta función auxiliar:
function is_checked(string $name, $value, $default) : string
{
$current_defaults = Input::old() ? old($name, 0) : $default;
return ($value == $current_defaults) ? ''checked'' : '''';
}
<input type="checkbox" name="is_acrive" value="1"
{{ is_checked(''is_active'', 1, $user->is_active) }}>
Versión de casilla de verificación múltiple:
function is_checked_multiple(string $name, $value, $defaults) : string
{
$current_defaults = Input::old() ? old($name, []) : (array)$defaults;
return in_array($value, $current_defaults) ? ''checked'' : '''';
}
@foreach ($plans as $plan)
<input type="checkbox" name="plans[]" value="{{ $plan->id }}"
{{ is_checked_multiple(''plans'', $plan->id, $user->plans->pluck(''id'') }}>
@endforeach
Estoy creando una casilla de verificación en una vista:
Form::checkbox(''test'', ''true'', Input::old(''test'', true));
Después de desmarcar la casilla, enviar el formulario y ser redireccionado de vuelta:
return Redirect::back()->withInput()->withErrors($validation);
La casilla de verificación todavía está marcada, presumiblemente porque ''test''
no existe en "Input::old"
por lo que está volviendo al valor predeterminado.
¿Alguna sugerencia sobre la mejor manera de lograr esto?
Editar:
He encontrado una forma algo hacky de obtener los resultados que quiero:
$isChecked = true; // The default state
// Check if the form has been returned "withInput"
if(Input::old())
{
$isChecked = Input::old(''test'', false); // If the field has old data available use that, otherwise it is unchecked
}
echo Form::checkbox(''test'', ''true'', $isChecked);
Escribiré esto en una función para su reutilización, pero parece un poco doloroso por lo que cualquier comentario / sugerencia sería genial
Editar 2 Lo siento si no está claro, para aclarar:
- El formulario está cargado con la casilla de verificación marcada
- Desmarque la casilla de verificación y envíe el formulario
- El formulario no valida, así que vuelvo a la forma
- La casilla de verificación se ha vuelto a verificar a sí misma; esperaría que no estuviera marcada, según los datos enviados por el usuario.
Supongo que esto sucede porque si una casilla de verificación no está marcada, el elemento no se incluye en los datos de la publicación.
Esto debería ser suficiente
echo Form::checkbox(''test'', ''true'', Input::old(''test'', true));
Si Input :: old () no existe, devolverá true, su valor predeterminado.
¿Por qué no hacer algo como esto?
<?php $last_turnaround = (array) Input::old(''turnaround''); ?>
{{ Form::checkbox( ''turnaround'', ''normal'', in_array(''normal'', $last_turnaround), array(''id'' => ''turnaround_normal'', ''class'' => ''turnaround'')) }}
Esto fue un poco confuso para mí también. Pero esto es lo que hice.
En mi controlador,
Session::flash(''test'', Input::get(''test'') ? ''true'' : ''false'');
Y en la vista
<?php $test = Session::get(''test''); ?>
<input type="checkbox" id="test" name="test" value="true" <?php echo is_null($test) ? ''checked'' : ($test == ''true'' ? ''checked'' : ''''); ?> />
Por lo tanto, prácticamente usando una sesión adicional de datos flash para moverse.
Mi solución para el mismo problema:
1) Elimine la casilla de verificación de la validación. Lógicamente, no hace diferencia.
2) En la función de actualización de mi controlador, agregué una instrucción if que usaba isset para determinar si el valor se envió o no (si no se envió, no se verificó y, por lo tanto, es falso).
if ($validation->passes())
{
$xxx = $this->xxx->find($id);
$xxx->update($input);
if (!isset($input[''checkbox_attribute''])) {
$xxx->checkbox_attribute = false;
}
$xxx->save();
return Redirect::to(''xxx.show'');
}
La casilla de verificación y la falta de coincidencia de sesión fue un error que se corrigió en Laravel 4. El siguiente código debe conservar la casilla de verificación en la redirección:
echo Form::checkbox(''payment_method'', ''credit'');
Para las casillas de verificación agrupadas, use algo como esto:
echo Form::checkbox(''payment_method[]'', ''credit'');
Eso también debería funcionar.
** Obviamente, deberás reemplazar payment_method y acreditar con tus propios atributos.
Yo tuve el mismo problema. Resulta que fue porque seguí las instrucciones sobre cómo publicar una casilla de verificación sin marcar, que decía:
echo Form::hidden(''name'', 0);
echo Form::checkbox(''name'', 1);
El problema con esto es que en la validación del formulario falla, si la casilla de verificación está marcada, Laravel repoblará los campos "oculto" y "casilla de verificación" con el valor anterior, por lo que su campo oculto siempre enviará 1 en lugar de 0. La solución simple es solo escriba HTML para el campo oculto en lugar de usar el ayudante de formulario:
echo ''<input type="hidden" name="name" value="0">'';
echo Form::checkbox(''name'', 1);
Tengo el mismo problema..
Lo arreglé así
Form::checkbox(''test'', ''true'', Input::old() ? Input::old(''test'', false) : true);
Espero que ayude..