En mi formulario de registro, tengo una casilla de verificación donde un usuario puede aceptar recibir boletines.

En la función create quiero mostrar todos los datos pasados:

protected function create(array $data)
{
    dd($data);
}

El nombre de mi campo de casilla de verificación es newsletter. Cuando lo hago dd(), no obtengo el valor del boletín informativo, solo para: name, email y password.

Si agrego este boletín a Validator, se muestra.

protected function validator(array $data)
{
    return Validator::make($data, [
        'name'       => 'required|max:255',
        'email'      => 'required|email|max:255|unique:users',
        'password'   => 'required|min:6|confirmed',
        'newsletter' => 'required',
    ]);
}

Ahora, cuando hago dd() se pasa, pero no quiero que esta casilla de verificación sea required. Debería ser opcional. ¿Debo cambiar algo en Validator o?

1
harunB10 13 nov. 2017 a las 16:51

2 respuestas

La mejor respuesta

Independientemente del backend, cuando una casilla de verificación no está marcada, su valor no se enviará como parte de la solicitud al servidor. Así es como funcionan los navegadores y por eso no verá un campo newsletter cuando descargue la solicitud.

Sin embargo, cuando usa el validador de Laravel y menciona el campo en las reglas, Laravel lo hace por usted y establece su valor. Para no hacerlo obligatorio, utilice la regla sometimes.

Eso lo haría solo con el propósito de descargar los datos. Pero al implementar la lógica real, en lugar de volcar datos, es de esperar que esté utilizando la instancia de solicitud, la fachada o el ayudante dado, que devolverá un valor falso para los parámetros inexistentes. Entonces, está bien sin agregar la regla adicional.

O puede establecer un valor predeterminado para el campo newsletter asegurándose de que si los datos no están allí, se producirán nuevos registros con el estado predeterminado deseado.


Por cierto, quieres asegurarte de que tu método de controlador acepte una instancia de Request en lugar de una matriz.

1
sepehr 13 nov. 2017 a las 14:15

Su campo newsletter es una casilla de verificación. Cuando se envía un formulario html y la casilla de verificación no está marcada, este campo no estará disponible en los datos publicados. Si la casilla de verificación está marcada, estará disponible. Este es el comportamiento html predeterminado, no puede hacer nada al respecto.

Para comprobar si la casilla de verificación se ha marcado en su código, puede utilizar lo siguiente:

$checked = array_key_exists('newsletter', $data);
1
Jerodev 13 nov. 2017 a las 13:56