CodeClouds Color Logo CodeClouds White Logo

PHP, LARAVEL | 23 August 2017

Custom Validation Rules in Laravel 5.5

In Laravel 5.5 an artisan command was introduced to allow for custom validation rules. Knowing how to take advantage of this is helpful for creating a web application based on the Laravel framework.

Laravel, the industry’s most popular PHP framework, comes with a variety of built in features, including premade validation rules to handle your application’s input forms. However, as of Laravel 5.5, there’s a great artisan feature to specify custom rules using the rule object. This comes in handy when making a custom Laravel application that may have unique input data. This blog post will provide a short intro on deploying custom validation rules.

laravel-and-custom-validation

Below we’ve provided some same code, written for an app that needs to verify a particular github repository. The way this was done was by creating an API call straight to GitHub. You can register your own custom validation rules by using the rule object. In order to generate a new custom rule object, you just need to define the class using two methods (‘passes’ and ‘message’). From here, you place your class into the App/Rules namespace. As an alternative, to create the rule class, you can run

namespace App\Rules;
use App\Source;
use Illuminate\Contracts\Validation\Rule;
class ValidateRepository implements Rule{
public $source;
public $branch;
public function __construct($source, $branch){
$this->source = $source;
$this->branch = $branch;
}
public function passes($attribute, $value){
if (! $this->source instanceof Source) {
return false;
}
return $this->source->client()->validRepository($value, $this->branch;);
}
public function message(){
return 'This is not a valid repository.';
}
}

This example code is from Taylor Otwell, the creator of Laravel.

The ‘passes’ method will then receive the arguments ‘$attribute’ and ‘$value’ from the Laravel Validator. Under validation, you will find the field name ‘$attribute. ‘$value’ will be the field value.

In this example, the ‘Source’ object is an ELoquent ORM model that represents a repository provider like GitHub.

‘Message’ returns an error message in case validation fails.

Now that we have defined our custom rule for validation, we can use it with a request. We can instantiate it in our rule array using the ‘validate’ method from the Request object in Laravel.

use App\Rules\ValidateRepository;
$request->validate([
'repository' => ['required', new ValidRepository($this->source(), $request->branch)]
]);

Now, let’s take a look at making a similar custom validation rule in order to verify a phone number extension. This can be accomplished by the following steps:

First, you will need to add two custom routes in order to render the view and to handle the post request.

app/Http/routes.php
Route::get('validate-phone', [email protected]');
Route::post('validate-phone', [email protected]');

Then you will have to create the controller file and add the required methods declared in the routes.

In app/Http/Controllers/MyValidatorController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class MyValidatorController extends Controller {
public function getPhoneValidation(){
return view('phone-validation');
}

public function postPhoneValidation(Request $request){
$this->validate($request, [
'phone' => 'required|ph_ext',
]);

      return 'success';
}
}

Next step is to extend the method on the Validator facade in AppServiceProvider. Custom validator Closure takes four arguments : $attribute, $value, $parameters, $validator.
In app/Providers/AppServiceProvider.php

<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Validator;

class AppServiceProvider extends ServiceProvider {
public function boot(){
Validator::extend('ph_ext', function($attribute, $value, $parameters) {
return substr(trim($value), 0, 2) == '+1'; //US country code in phone
});
}

public function register(){
}
}

When the validation rule will run, you need to show the respective messages.
In resources/lang/en/validation.php

'custom' => [
'phone' => [
'ph_ext' => 'Please enter a phone number with US country code',
],
],

Lastly, you need to create the view and test the validation.
resources/view/phone-validation.blade.php

{!! Form::open(array('route' => 'validate-phone', 'method'=>'POST')) !!}
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach</ul>
</div>
@endif

{!! Form::text('phone', old('phone'), ['placeholder' => 'Enter a US phone number']) !!}
<br/>
{!! Form::submit('Save') !!}
</form>

You can use your own custom rule from a Form Request, or any other location you need to validate input. This is one of many great features that makes Laravel something PHP developers gravitate towards for their custom applications. Once you’ve got the hang of it, you’ll probably find yourself taking advantage of this feature often.

project manager jobs in kolkata

If you need a custom web application developed, or you have an existing Laravel project that needs updated or maintained, CodeClouds has a team of expert Laravel developers at affordable rates. Contact us to learn more today!

If you are an experienced Laravel developer looking to take the next step in your career or you have experience in leading complex projects, join our development team! We have openings for project manager jobs in Kolkata.

Originally written August 23, 2017. Last updated September 8th, 2020

 Views

Written by Biplab Pal

Biplab is a technology enthusiast. After completing his Masters in Systems Management in 2007, he worked in many domains. In web technology he has more than six years of experience.

  • facebook
  • twitter
  • linkedin
  • pinterest
  • whatsup
Related Articles
An Introduction to PHP, Its Uses, and Starting a Career With PHP

PHP | 27 October 2022

An Introduction to PHP, Its Uses, and Starting a Career With PHP

PHP handles back end logic for websites and web applications, and is the most common language that developers use to build the backend of the web as we know it. The difference between frontend languages like HTML and javascript is they are processed client side. PHP, as a backend language, is processed server side.

Why PHP is Great Choice for your Startup

PHP, WEB DEVELOPMENT, OPINION | 07 December 2020

Why PHP is Great Choice for your Startup

We love PHP at CodeClouds. It’s a powerful, highly extensible language that brings a lot to the table. If you’re building a new startup, it can be an excellent tool that provides you with a lot of powerful functionality; as far as server-side programming languages go, it strikes an excellent balance of power and accessibility that others envy. Today we’re going to be breaking down exactly why we think it’s a good choice for you, and why you should be using it in your startup.