Package Data | |
---|---|
Maintainer Username: | fadion |
Maintainer Contact: | jonidashi@gmail.com (Fadion Dashi) |
Package Create Date: | 2014-05-12 |
Package Last Update: | 2015-11-19 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-14 15:17:53 |
Package Statistics | |
---|---|
Total Downloads: | 1,142 |
Monthly Downloads: | 0 |
Daily Downloads: | 0 |
Total Stars: | 13 |
Total Watchers: | 1 |
Total Forks: | 4 |
Total Open Issues: | 1 |
A simple Laravel package that provides an expressive alternative to building validation rules. It uses what you already know about validation with Laravel and builds on top of that.
Instead of this:
$rules = [
'username' => 'required|alpha',
'email' => 'required|email'
];
You'll be writing:
Rule::add('username')->required()->alpha();
Rule::add('email')->required()->email();
$rules = Rule::get();
Which method is more easy to read or write is a matter of personal preference, so I'm not taking sides. However, using Rule
offers two main advantages:
composer update
:{
"require": {
"fadion/rule": "~1.1"
}
}
Add Fadion\Rule\RuleServiceProvider::class
to your config/app.php
file, inside the providers
array.
Add a new alias: 'Rule' => Fadion\Rule\Facades\Rule::class
to your config/app.php
file, inside the aliases
array.
For Laravel 4, use version
1.0
If you've used Laravel's Validator, then you already know how to use Rule
. It just changes the way you write rules, but the validation process remains exactly the same.
A complete validation example
$inputs = Input::all();
Rule::add('username')->required()->alpha();
Rule::add('email')->required()->email();
$validator = Validator::make($inputs, Rule::get());
if ($validator->fails()) {
Return::back()->withInput()->withErrors($validator);
}
Rules with parameters
Rule parameters are handled as simple method arguments. There can be one or more arguments, depending on the rule and some can be arrays too (like: in
, not_in
, mimes
, etc.).
Rule::add('date')->date_format('mm/dd/YYYY');
Rule::add('age')->between(5, 15);
Rule::add('role')->in(['Admin', 'Moderator', 'Editor']);
Exists and Unique
exists
and unique
are special cases, as they have a few defined and documented arguments, as well as dynamic ones for the where clauses.
Rule::add('username')->exists('users');
Rule::add('username')->exists('users', 'name');
Rule::add('username')->exists('users', 'name', 'id', 10);
Rule::add('email')->unique('users');
Rule::add('email')->unique('users', 'email_address', 10);
Rule::add('email')->unique('users', 'email_address', 10, 'account_id', 1);
Custom rules
Rule
handles custom rules in the same way as the predefined ones. It even accepts parameters.
Validator::extend('foo', function($attribute, $value, $parameters) {
return $value == 'foo';
});
Rule::add('name')->required()->foo();
Array rule
Laravel's rule for validating an input as array
is renamed to is_array()
. The word "array" is reserved in PHP and can't be used as a method name, hence the rename.
Rule::add('languages')->is_array();
Method names
Methods can be written as either snake_case (as Laravel accepts rule names) or as camelCase. Both cases behave exactly the same, so use whatever feels better.
So, the methods below are equivalent:
Rule::add('date')->date_format('Y-m-d');
Rule::add('date')->dateFormat('Y-m-d');
Rule::add('username')->alpha_dash();
Rule::add('username')->alphaDash();
Laravel has an option to alias input names with custom attributes, as a way to build better error messages. Rule
provides an easy way to create them.
Rule::add('name', 'Your name')->required();
Rule::add('email', 'Your email')->required()->email();
$validator = Validator::make(Input::all(), Rule::get());
// Apply attributes
$validator->setAttributeNames(Rule::getAttributes());
There's no way that you start writing expressive rules, but keep messages as arrays. Rule
will handle those too in a very elegant and easy to use way. Just add a message()
method after the rule:
Rule::add('email')
->required()->message("Email shouldn't be empty.")
->email()->message("Email appears to be invalid.");
Rule::add('password')
->required()->message("Password shouldn't be empty.")
->between(5, 15)->message("Make that password more secure!");
$rules = Rule::get();
$messages = Rule::getMessages();