Validación de un campo dependiendo de otro

publicado por: Anonymous

Quisiera validar que un campo no se guarde vacío siempre y cuando se haya checkeado otro campo tipo checkbox, es decir si se selecciona el primero, obligatoriamente deberia llenarse los datos en el segundo que es un datetime.

¿Alguna sugerencia?

solución

La solución según lo que planteas parece estar en la regla required_if:

https://laravel.com/docs/5.2/validation#rule-required-if

required_if:anotherfield,value,…

The field under validation must be present and not empty if the anotherfield field is equal to any value.

En español: El campo que está siendo validado debe estar presente y no vacío si el campo "anotherfield" es igual a algún valor.

Lo usarías de la siguente forma en tu Request (o donde sea que hagas la validación):

...
'campo2' => 'required_if:campo1,1',
...

Asumiendo que el valor de tu checkbox sea 1.


Aquí está la referencia en la documentación de la validación en el código de laravel, en caso que quieras ver como funciona:

/**
 * Validate that an attribute exists when another attribute has a given value.
 *
 * @param  string  $attribute
 * @param  mixed   $value
 * @param  mixed   $parameters
 * @return bool
 */
protected function validateRequiredIf($attribute, $value, $parameters)
{
    $this->requireParameterCount(2, $parameters, 'required_if');
    $data = Arr::get($this->data, $parameters[0]);
    $values = array_slice($parameters, 1);
    if (is_bool($data)) {
        array_walk($values, function (&$value) {
            if ($value === 'true') {
                $value = true;
            } elseif ($value === 'false') {
                $value = false;
            }
        });
    }
    if (in_array($data, $values)) {
        return $this->validateRequired($attribute, $value);
    }
    return true;
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *