two-bros / validation-service
Requires (Dev)
- fzaninotto/faker: ~1.4
- mockery/mockery: 0.9.*
- orchestra/testbench: ~3.0
- phpunit/phpunit: 4.*
This package is not auto-updated.
Last update: 2024-11-09 18:06:28 UTC
README
Composer
You can install this package via Composer by running the command: composer require "two_bros/validation-service:~1.0"
.
Or by adding the package to your composer.json
{ "require": { "two_bros/validation-service": "~1.0" } }
Then install it via composer install
or composer update
Configuration
Once you have installed the package, you will need to register the Service Provider in your config/app.php
under the providers
array:
'providers' => [ ... TwoBros\ValidationService\Providers\ValidationServiceProvider::class, ];
After adding the Service Provider to your config/app.php
, you should publish the configuration from the package using: php artisan vendor:publish
This will create a file named validation_service.php
in the configuration directory. This file will be utilized to add any custom validation rules you may create.
The format for this configuration file is:
return [ 'passwordStrength' => 'User@passwordStrength' ];
Basic Usage
Simple Validation
For each model that you need to validate, you can simply create a validation class and extend the TwoBros\ValidationService\Services\Validation\LaravelValidator
.
use TwoBros\ValidationService\Services\Validation\LaravelValidator; class ModelCreateValidator extends LaravelValidator { protected $rules = [ 'name' => 'required|min:8' ]; }
Now when you want to validate data, you can pass the data into the validator and determine if it passed or not.
$modelValidator = new ModelCreateValidator($this->app['validator']); if ($modelValidator->with($inputArray) ->passes()) { // Do some stuff for passing } else { // Get the errors $validationErrors = $modelValidator->errors(); // Do some stuff for failing }
Custom Messages
If you want customize your validation messages, you can do this by passing the message array to the with
method.
$messages = [ 'required' => 'The field :attribute is required' ]; $modelValidator = new ModelCreateValidator($this->app['validator']); if ($modelValidator->with($inputArray, $messages) ->passes()) { // Do some stuff for passing } else { // Get the errors $validationErrors = $modelValidator->errors(); // Do some stuff for failing }
Or by using the withMessages
method of the validator.
$messages = [ 'required' => 'The field :attribute is required' ]; $modelValidator = new ModelCreateValidator($this->app['validator']); if ($modelValidator->with($inputArray) ->withMessages($messages) ->passes()) { // Do some stuff for passing } else { // Get the errors $validationErrors = $modelValidator->errors(); // Do some stuff for failing }
Adding Uniqueness Requirements to Validation
There are times when you may want to use uniqueness, but when you are doing an update you need to use the id of current record to exclude the current record from the uniqueness check.
For this, you need to add a method to your validator class addRuntimeValidationRules
that updates the rules with the ids needed.
use TwoBros\ValidationService\Services\Validation\LaravelValidator; class ModelCreateValidator extends LaravelValidator { protected $rules = [ 'name' => 'required|min:8', 'email' => 'required|max:100|unique:users,email' ]; public function addRuntimeValidationRules() { $this->rules[ 'email' ] = 'required|max:100|unique:users,email,' . $this->uniqueIds[ 'email' ]; return $this; } }
You can then add the function to the call string, so you can customize this with the id needed upon validation.
$modelValidator = new ModelCreateValidator($this->app['validator']); if ($modelValidator->with($inputArray) ->setUniqueId('email', $modelToUpdate->id) ->addRuntimeValidationRules() ->passes()) { // Do some stuff for passing } else { // Get the errors $validationErrors = $modelValidator->errors(); // Do some stuff for failing }
You will note that you must use the setUniqueId
method call to set the id of the current record. Also, instead of instantiating the validator class, you can use Laravel's IoC to bring it into the method.
public function update(ModelValidator $modelValidator) { if ($modelValidator->with($inputArray) ->setUniqueId('email', $modelToUpdate->id) ->addRuntimeValidationRules() ->passes()) { // Do some stuff for passing } else { // Get the errors $validationErrors = $modelValidator->errors(); // Do some stuff for failing } }
License
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.