J'ai deux champs qui sont facultatifs que si les deux ne sont pas présents:
$rules = [
'initial_page' => 'required_with:end_page|integer|min:1|digits_between: 1,5',
'end_page' => 'required_with:initial_page|integer|min:2|digits_between:1,5'
];
Maintenant, end_page
doit être supérieur à initial_page
. Comment inclure ce filtre?
Il y a pas de validation intégrée qui vous permettrait de comparer les valeurs de champs de cette manière dans Laravel, vous devrez donc implémenter un validateur personnalisévous permettent de réutiliser la validation si nécessaire. Heureusement, Laravel rend l’écriture d’un validateur personnalisé très facile.
Commencez par définir un nouveau validateur dans yor AppServiceProvider:
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Validator::extend('greater_than_field', function($attribute, $value, $parameters, $validator) {
$min_field = $parameters[0];
$data = $validator->getData();
$min_value = $data[$min_field];
return $value > $min_value;
});
Validator::replacer('greater_than_field', function($message, $attribute, $rule, $parameters) {
return str_replace(':field', $parameters[0], $message);
});
}
}
Vous pouvez maintenant utiliser votre nouvelle règle de validation dans votre $ rules} _:
$rules = [
'initial_page' => 'required_with:end_page|integer|min:1|digits_between: 1,5',
'end_page' => 'required_with:initial_page|integer|greater_than_field:initial_page|digits_between:1,5'
];
Vous trouverez plus d'informations sur la création de validateurs personnalisés ici: http://laravel.com/docs/5.1/validation#custom-validation-rules . Ils sont faciles à définir et peuvent ensuite être utilisés partout où vous validez vos données.
Pour Laravel 5.4 ce sera:
$rules = ['end_page'=>'min:'.(int)$request->initial_page]
Je pense que vous pouvez essayer quelque chose comme ça,
$init_page = Input::get('initial_page');
$rules = [
'initial_page' => 'required_with:end_page|integer|min:1|digits_between: 1,5',
'end_page' => 'required_with:initial_page|integer|min:'. ($init_page+1) .'|digits_between:1,5'
];
A partir de Laravel 5.6, les règles gt
, gte
, lt
et lte
sont ajoutées.
Pourquoi ne pas simplement définir le numéro $min_number = $min + 1
et utiliser le validateur min:$min_number
, exemple:
$min = intval($data['min_number']) + 1;
return ['max_number' => 'required|numeric|min:'.$min];
Et vous pouvez ensuite renvoyer un message d'erreur personnalisé pour expliquer l'erreur à l'utilisateur.