But, first of all you have to have Laravel 4 installed in your system, if you haven't you can refer here in my previous blog post as a guide.
In Laravel 4 there are multiple ways to add your own validation rules, one of which is to extend the Validation Class, now this can be done without Namespaces but as using Namespaces will be less likely to cause naming collisions in the future, we’ll do it with Namespaces.
Setup my space
Start by picking a namespace, for this example, I'll call it MyCustomValidation. Next, create a folder and files wherein will place your validation files. I made "lib/MyCustomValidation" folder. Take note that it is on the same level of "app" folder and "lib" can be any folder name you want.
Next we need to add the Namespace mapping to Composer, we can do this by updating your composer.json file like:
"autoload": { "psr-0": { "MyCustomValidation": "lib/" } }
then run composer dump-autoload, this will update the autoload mappings. Now, let's proceed to our first validation!
Validation the Easy Way
The first way of extending the Validation capabilities of Laravel 4 via Classes is best suited if you only need a few extra Validation rules. Let’s start by creating the Validation Class, the example will demonstrate how to do this and we’ll keep the validation rule simple by checking if a number is divisible by 2.
Create a folder names "Validator" under "lib/MyCustomValidation". After this, let's create a class, I'll call it Text.php. Now, we will fill it up with details. (You may just copy paste). Take note that the word "validate" is required as a pre-text before your real function name.
namespace MyCustomValidation\Validator; class Text { public function validateDivisibleByTwo($attribute, $value, $parameters) { return ($value % 2) === 0; } }
Once this is done we need to register this new Validator method, this can be done by calling the following:
// Extend Validator Validator::extend('divisible_by_two', '\MyCustomValidation\Validator\Text@divisibleByTwo');
This can be called anywhere as long as it’s before the use of the Validation rule.
Now, we're done registering! Let's try it out! To make it easy, we'll just create a route to test it out.
Route::get('divisibleByTwo/{number}', function($number) { Validator::extend('divisible_by_two', '\MyCustomValidation\Validator\Text@divisibleByTwo'); $input = ['number' => $number]; $rule = ['number' => 'divisible_by_two']; $messages = ['divisible_by_two' => 'The :attribute must be divisible by two.']; $validator = Validator::make($input, $rule, $messages); if ($validator->fails()) { return $validator->messages()->first('number'); } return $number . ' is divisible by two.'; });Now when you call the route: divisibleByTwo/2, it will output an error message or if it’s divisible by 2 a success message.
Global Error Message
To further clean up our application and keep it DRY, we can set the error message at app/lang/en/validation.php, and just add the following line in that file:
'divisible_by_two' => 'The :attribute must be divisible by two.',
And there you go, you can just call it and use your custom validation as needed. If you want to further extend and add more validation rules, click here to see part 2 of this series.
No comments:
Post a Comment