PHP Rakit Validation
last modified February 16, 2025
PHP Rakit Validation tutorial shows how to validate PHP values with Rakit Validation package.
Rakit Validation
Rakit Validation is a PHP Standalone Validation Library. It was
inspired by Laravel's Illuminate\Validation
.
Installation
$ composer require rakit/validation $ composer require tightenco/collect
We install the Rakit Validation package and the Laravel's collection package.
Simple example
In the first example, we show how to do a very simple validation.
<?php require('vendor/autoload.php'); use Rakit\Validation\Validator; $validator = new Validator; $vals = ['name' => '']; $rules = ['name' => 'required']; $validation = $validator->make($vals, $rules); $validation->validate(); if ($validation->fails()) { $coll = collect($validation->errors()); $messages = $coll->flatten(); foreach ($messages as $message) { echo $message . "\n"; } } else { echo "Validation passed"; }
The example validates one required value.
use Rakit\Validation\Validator;
We include the validator.
$validator = new Validator;
We create the instance of the Validator
.
$vals = ['name' => '']; $rules = ['name' => 'required'];
The $vals
contains the values to be validated. The
$rules
contains the validation rules. In our case, the
name
value is required.
$validation = $validator->make($vals, $rules);
With the make
method we prepare the validation; we pass the values
and the rules.
$validation->validate();
We perform the validation with validate
.
if ($validation->fails()) {
With fails
we check if the validation failed.
$coll = collect($validation->errors()); $messages = $coll->flatten(); foreach ($messages as $message) { echo $message . "\n"; }
We use the Laravel's collections to parse the errors.
$ php simple.php The Name is required
Validation rules
Rakit Validation contains a set of predefined rules, such as required
,
email
, min
, max
, or url
.
The rules can be combined with the |
character.
<?php require 'vendor/autoload.php'; use Rakit\Validation\Validator; $validator = new Validator; $vals = ['name' => 'John Doe', 'email' => 'johndoe#gmail.com', 'password' => '12345', 'confirm_password' => '23456']; $rules = ['name' => 'required', 'email' => 'required|email', 'password' => 'required|min:6', 'confirm_password' => 'required|same:password']; $validation = $validator->make($vals, $rules); $validation->validate(); if ($validation->fails()) { $coll = collect($validation->errors()); $messages = $coll->flatten(); foreach ($messages as $message) { echo $message . "\n"; } } else { echo "Validation passed"; }
The example uses several validation rules.
$rules = ['name' => 'required', 'email' => 'required|email', 'password' => 'required|min:6', 'confirm_password' => 'required|same:password'];
We have four validation rules. The email
is required must be a
valid email address. The password
is required and must have at
least six characters. The confirm_password
must be the same as the
password
.
$ php rules.php The Email is not valid email The Password minimum is 6 The Confirm password must be same with password
The example finished with three validation failures.
Validating dates
The next example shows how to validate dates.
<?php require('vendor/autoload.php'); use Rakit\Validation\Validator; $validator = new Validator; $vals = ['born' => '2000-03-30', 'meetingDate' => '2010-12-31']; $rules = ['born' => 'before:2018-12-31', 'meetingDate' => 'after:2019-02-02']; $validation = $validator->make($vals, $rules); $validation->validate(); if ($validation->fails()) { $coll = collect($validation->errors()); $messages = $coll->flatten(); foreach ($messages as $message) { echo $message . "\n"; } } else { echo "Validation passed"; }
The example validates two dates.
$vals = ['born' => '2000-03-30', 'meetingDate' => '2010-12-31']; $rules = ['born' => 'before:2018-12-31', 'meetingDate' => 'after:2019-02-02'];
With the before
rule, we validate that the given date is before some
date and with the after
rule, we validate that the given date is after
some date.
$ php dates.php The MeetingDate must be a date after 2019-02-02.
Custom messages
We can provide custom validation messages. The messages are passed as the third
parameter to the make
method.
<?php require('vendor/autoload.php'); use Rakit\Validation\Validator; $validator = new Validator; $vals = ['name' => '']; $rules = ['name' => 'required']; $msgs = ['name' => 'The name is compulsory']; $validation = $validator->make($vals, $rules, $msgs); $validation->validate(); if ($validation->fails()) { $coll = collect($validation->errors()); $messages = $coll->flatten(); foreach ($messages as $message) { echo $message . "\n"; } } else { echo "Validation passed"; }
The example adds a custom message.
$msgs = ['name' => 'The name is compulsory'];
This is our custom message.
$validation = $validator->make($vals, $rules, $msgs);
The messages are passed to the make
method.
$ php custom_message.php The name is compulsory
Validating GET data
In the following example, we validate GET data.
<?php require('vendor/autoload.php'); use Rakit\Validation\Validator; $validator = new Validator; $rules = ['name' => 'required', 'email' => 'required|email']; $validation = $validator->make($_GET, $rules); $validation->validate(); if ($validation->fails()) { $coll = collect($validation->errors()); $messages = $coll->flatten(); foreach ($messages as $message) { echo $message . "\n"; } } else { echo "Validation passed"; }
The example validates name and email parameters from a GET request.
$rules = ['name' => 'required', 'email' => 'required|email']; $validation = $validator->make($_GET, $rules);
The make
method takes the global $_GET
variable
as the first parameter.
$ php -S localhost:8000 [Wed Jul 13 15:08:56 2022] PHP 8.1.2 Development Server (http://localhost:8000) started
We start the built-in web server.
$ curl "localhost:8000/get_data.php?name=John%20Doe&email=john.doe#gmail.com" The Email is not valid email
We create a GET request with two parameters with the curl
tool.
Source
Rakit Validation Github reference
In this article we have used Rakit Validation to validate PHP values.
Author
List all PHP tutorials.