Just run the composer require command from the Terminal:
$ composer require ukeloop/laravel-validation-rule-builder
You can define validation rules with method chain pattern.
use Illuminate\Support\Facades\Validator;
use Ukeloop\ValidationRuleBuilder\ValidationRuleBuilder;
Validator::make($input, [
'title' => (new ValidationRuleBuilder())->required()->string()->max(255),
]);
You can use Laravel validation rules.
use Ukeloop\ValidationRuleBuilder\ValidationRuleBuilder;
$validationRule = new ValidationRuleBuilder();
$validationRule->required();
$validationRule->sometime();
$validationRule->nullable();
$validationRule->string();
$validationRule->integer();
$validationRule->numeric();
$validationRule->date();
$validationRule->bool();
$validationRule->min(8);
$validationRule->max(255);
$validationRule->email('strict', 'dns');
// etc ...
For other validation rules, please refer to the laravel docs.
$validationRule->add(Password::min(8));
new ValidationRuleBuilder(
function ($attribute, $value, $fail) {
if ($value === 'foo') {
$fail('The ' . $attribute . ' is invalid.');
}
}
);
Validation rule sets are created by combining laravel validation rules. This will help you can keep your project's validation rules more DRY.
e.g. Rule of email address
use Ukeloop\ValidationRuleBuilder\RuleSet;
class EmailRuleSet extends RuleSet
{
public static function rules(): ValidationRuleBuilder
{
return new ValidationRuleBuilder('email:strict,dns,spoof');
}
}
use Illuminate\Support\Facades\Validator;
Validator::make($input, [
'email' => EmailRuleSet::rules()->somtime()->required(),
]);
e.g. Rule of password
use Ukeloop\ValidationRuleBuilder\RuleSet;
class PasswordRuleSet extends RuleSet
{
public static function rules(): ValidationRuleBuilder
{
return new ValidationRuleBuilder(
Password::min(8)
->letters()
->mixedCase()
->numbers()
->symbols()
);
}
}
use Illuminate\Support\Facades\Validator;
Validator::make($input, [
'password' => PasswordRuleSet::rules()->required()->confirmed(),
]);
$ composer test