-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Sandu Luca
committed
Jul 25, 2020
0 parents
commit 5dde595
Showing
6 changed files
with
322 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
/vendor/ | ||
composer.lock |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
# Validation | ||
|
||
Standalone library to use Illuminate\\Validation package outside the Laravel framework. | ||
|
||
|
||
## Install Validation: | ||
- execute | ||
```bash | ||
composer require ggbear/validation | ||
``` | ||
## Usage | ||
```php | ||
|
||
require_once __DIR__ . '\..\vendor\autoload.php'; | ||
/** @var Factory $validatorFactory */ | ||
$validatorFactory = new ValidatorFactory(); | ||
|
||
$number = '123456789012a'; | ||
$id = 123; | ||
$string = 'string value'; | ||
$channel = 'UNKNOWN'; | ||
|
||
$input = [ | ||
'number' => $number, | ||
'id' => $id, | ||
'string' => $string, | ||
'channel' => $channel | ||
]; | ||
$rules = [ | ||
'number' => 'required|integer|digits_between:11,12', | ||
'id' => 'required|integer', | ||
'string' => 'required|string', | ||
'channel' => 'required|string|in:WEB,API,SOCKET', | ||
]; | ||
$validator = $validatorFactory->make($input, $rules); | ||
``` | ||
This will return an instance of `Illuminate\Validation\Validator::class`. | ||
|
||
<br> | ||
<br> | ||
|
||
```php | ||
if ($validator->fails()) { | ||
print_r($validator->errors()->toArray()); | ||
} else { | ||
echo 'Validaton passed.' . PHP_EOL; | ||
} | ||
``` | ||
You can learn more about the *Laravel Validator* in the [official documentation website](https://laravel.com/docs/7.x/validation). | ||
|
||
### About validation rules | ||
- https://laravel.com/docs/7.x/validation#available-validation-rules | ||
|
||
### |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
{ | ||
"name": "ggbear/validation", | ||
"description": "Standalone library to use Illuminate\\Validation package outside the Laravel framework.", | ||
"type": "library", | ||
"authors": [ | ||
{ | ||
"name": "Sandu Luca", | ||
"email": "[email protected]" | ||
} | ||
], | ||
"require": { | ||
"illuminate/validation": "^7.21" | ||
}, | ||
"autoload": { | ||
"psr-4": { | ||
"GGBear\\Validation\\": "src/" | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,151 @@ | ||
<?php | ||
|
||
return [ | ||
|
||
/* | ||
|-------------------------------------------------------------------------- | ||
| Validation Language Lines | ||
|-------------------------------------------------------------------------- | ||
| | ||
| The following language lines contain the default error messages used by | ||
| the validator class. Some of these rules have multiple versions such | ||
| as the size rules. Feel free to tweak each of these messages here. | ||
| | ||
*/ | ||
|
||
'accepted' => 'The :attribute must be accepted.', | ||
'active_url' => 'The :attribute is not a valid URL.', | ||
'after' => 'The :attribute must be a date after :date.', | ||
'after_or_equal' => 'The :attribute must be a date after or equal to :date.', | ||
'alpha' => 'The :attribute may only contain letters.', | ||
'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.', | ||
'alpha_num' => 'The :attribute may only contain letters and numbers.', | ||
'array' => 'The :attribute must be an array.', | ||
'before' => 'The :attribute must be a date before :date.', | ||
'before_or_equal' => 'The :attribute must be a date before or equal to :date.', | ||
'between' => [ | ||
'numeric' => 'The :attribute must be between :min and :max.', | ||
'file' => 'The :attribute must be between :min and :max kilobytes.', | ||
'string' => 'The :attribute must be between :min and :max characters.', | ||
'array' => 'The :attribute must have between :min and :max items.', | ||
], | ||
'boolean' => 'The :attribute field must be true or false.', | ||
'confirmed' => 'The :attribute confirmation does not match.', | ||
'date' => 'The :attribute is not a valid date.', | ||
'date_equals' => 'The :attribute must be a date equal to :date.', | ||
'date_format' => 'The :attribute does not match the format :format.', | ||
'different' => 'The :attribute and :other must be different.', | ||
'digits' => 'The :attribute must be :digits digits.', | ||
'digits_between' => 'The :attribute must be between :min and :max digits.', | ||
'dimensions' => 'The :attribute has invalid image dimensions.', | ||
'distinct' => 'The :attribute field has a duplicate value.', | ||
'email' => 'The :attribute must be a valid email address.', | ||
'ends_with' => 'The :attribute must end with one of the following: :values', | ||
'exists' => 'The selected :attribute is invalid.', | ||
'file' => 'The :attribute must be a file.', | ||
'filled' => 'The :attribute field must have a value.', | ||
'gt' => [ | ||
'numeric' => 'The :attribute must be greater than :value.', | ||
'file' => 'The :attribute must be greater than :value kilobytes.', | ||
'string' => 'The :attribute must be greater than :value characters.', | ||
'array' => 'The :attribute must have more than :value items.', | ||
], | ||
'gte' => [ | ||
'numeric' => 'The :attribute must be greater than or equal :value.', | ||
'file' => 'The :attribute must be greater than or equal :value kilobytes.', | ||
'string' => 'The :attribute must be greater than or equal :value characters.', | ||
'array' => 'The :attribute must have :value items or more.', | ||
], | ||
'image' => 'The :attribute must be an image.', | ||
'in' => 'The selected :attribute is invalid.', | ||
'in_array' => 'The :attribute field does not exist in :other.', | ||
'integer' => 'The :attribute must be an integer.', | ||
'ip' => 'The :attribute must be a valid IP address.', | ||
'ipv4' => 'The :attribute must be a valid IPv4 address.', | ||
'ipv6' => 'The :attribute must be a valid IPv6 address.', | ||
'json' => 'The :attribute must be a valid JSON string.', | ||
'lt' => [ | ||
'numeric' => 'The :attribute must be less than :value.', | ||
'file' => 'The :attribute must be less than :value kilobytes.', | ||
'string' => 'The :attribute must be less than :value characters.', | ||
'array' => 'The :attribute must have less than :value items.', | ||
], | ||
'lte' => [ | ||
'numeric' => 'The :attribute must be less than or equal :value.', | ||
'file' => 'The :attribute must be less than or equal :value kilobytes.', | ||
'string' => 'The :attribute must be less than or equal :value characters.', | ||
'array' => 'The :attribute must not have more than :value items.', | ||
], | ||
'max' => [ | ||
'numeric' => 'The :attribute may not be greater than :max.', | ||
'file' => 'The :attribute may not be greater than :max kilobytes.', | ||
'string' => 'The :attribute may not be greater than :max characters.', | ||
'array' => 'The :attribute may not have more than :max items.', | ||
], | ||
'mimes' => 'The :attribute must be a file of type: :values.', | ||
'mimetypes' => 'The :attribute must be a file of type: :values.', | ||
'min' => [ | ||
'numeric' => 'The :attribute must be at least :min.', | ||
'file' => 'The :attribute must be at least :min kilobytes.', | ||
'string' => 'The :attribute must be at least :min characters.', | ||
'array' => 'The :attribute must have at least :min items.', | ||
], | ||
'not_in' => 'The selected :attribute is invalid.', | ||
'not_regex' => 'The :attribute format is invalid.', | ||
'numeric' => 'The :attribute must be a number.', | ||
'password' => 'The password is incorrect.', | ||
'present' => 'The :attribute field must be present.', | ||
'regex' => 'The :attribute format is invalid.', | ||
'required' => 'The :attribute field is required.', | ||
'required_if' => 'The :attribute field is required when :other is :value.', | ||
'required_unless' => 'The :attribute field is required unless :other is in :values.', | ||
'required_with' => 'The :attribute field is required when :values is present.', | ||
'required_with_all' => 'The :attribute field is required when :values are present.', | ||
'required_without' => 'The :attribute field is required when :values is not present.', | ||
'required_without_all' => 'The :attribute field is required when none of :values are present.', | ||
'same' => 'The :attribute and :other must match.', | ||
'size' => [ | ||
'numeric' => 'The :attribute must be :size.', | ||
'file' => 'The :attribute must be :size kilobytes.', | ||
'string' => 'The :attribute must be :size characters.', | ||
'array' => 'The :attribute must contain :size items.', | ||
], | ||
'starts_with' => 'The :attribute must start with one of the following: :values', | ||
'string' => 'The :attribute must be a string.', | ||
'timezone' => 'The :attribute must be a valid zone.', | ||
'unique' => 'The :attribute has already been taken.', | ||
'uploaded' => 'The :attribute failed to upload.', | ||
'url' => 'The :attribute format is invalid.', | ||
'uuid' => 'The :attribute must be a valid UUID.', | ||
|
||
/* | ||
|-------------------------------------------------------------------------- | ||
| Custom Validation Language Lines | ||
|-------------------------------------------------------------------------- | ||
| | ||
| Here you may specify custom validation messages for attributes using the | ||
| convention "attribute.rule" to name the lines. This makes it quick to | ||
| specify a specific custom language line for a given attribute rule. | ||
| | ||
*/ | ||
|
||
'custom' => [ | ||
'attribute-name' => [ | ||
'rule-name' => 'custom-message', | ||
], | ||
], | ||
|
||
/* | ||
|-------------------------------------------------------------------------- | ||
| Custom Validation Attributes | ||
|-------------------------------------------------------------------------- | ||
| | ||
| The following language lines are used to swap our attribute placeholder | ||
| with something more reader friendly such as "E-Mail Address" instead | ||
| of "email". This simply helps us make our message more expressive. | ||
| | ||
*/ | ||
|
||
'attributes' => [], | ||
|
||
]; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
<?php | ||
|
||
namespace GGBear\Validation; | ||
|
||
use Illuminate\Filesystem\Filesystem; | ||
use Illuminate\Translation\FileLoader; | ||
use Illuminate\Translation\Translator; | ||
use Illuminate\Validation\Factory; | ||
|
||
class ValidatorFactory | ||
{ | ||
public $dirLang; | ||
public $filenameMessages; | ||
/** | ||
* @var Factory | ||
*/ | ||
public $factory; | ||
public $dirErrorMessages; | ||
// Translations root directory | ||
public $basePath; | ||
public static $translator; | ||
|
||
public function __construct($dirLang = 'en', $dirErrorMessages = 'ErrorMessages', $filenameMessages = 'validation') | ||
{ | ||
$this->dirLang = $dirLang; | ||
$this->filenameMessages = $filenameMessages; | ||
$this->dirErrorMessages = $dirErrorMessages; | ||
$this->basePath = $this->getTranslationsRootPath(); | ||
$this->factory = new Factory($this->loadTranslator()); | ||
} | ||
|
||
public function translationsRootPath(string $path = '') | ||
{ | ||
if (!empty($path)) { | ||
$this->basePath = $path; | ||
$this->reloadValidatorFactory(); | ||
} | ||
return $this; | ||
} | ||
|
||
private function reloadValidatorFactory() | ||
{ | ||
$this->factory = new Factory($this->loadTranslator()); | ||
return $this; | ||
} | ||
|
||
public function getTranslationsRootPath(): string | ||
{ | ||
return dirname(__FILE__) . '/'; | ||
} | ||
|
||
public function loadTranslator(): Translator | ||
{ | ||
$loader = new FileLoader(new Filesystem(), $this->basePath . $this->dirErrorMessages); | ||
$loader->addNamespace($this->dirErrorMessages, $this->basePath . $this->dirErrorMessages); | ||
$loader->load($this->dirLang, $this->filenameMessages, $this->dirErrorMessages); | ||
return static::$translator = new Translator($loader, $this->dirLang); | ||
} | ||
|
||
public function __call($method, $args) | ||
{ | ||
return $this->factory->$method(...$args); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
<?php | ||
|
||
use GGBear\Validation\ValidatorFactory; | ||
use Illuminate\Validation\Factory; | ||
|
||
require_once __DIR__ . '\..\vendor\autoload.php'; | ||
|
||
|
||
|
||
/** @var Factory */ | ||
$validatorFactory = new ValidatorFactory(); | ||
|
||
$msisdn = '123456789012a'; | ||
$serviceId = 123; | ||
$channel = null; | ||
$input = [ | ||
'msisdn' => $msisdn, | ||
'service_id' => $serviceId, | ||
'channel' => $channel | ||
]; | ||
$rules = [ | ||
'msisdn' => 'required|integer|digits_between:11,12', | ||
'service_id' => 'required|integer', | ||
'channel' => 'required|string', | ||
]; | ||
|
||
$validator = $validatorFactory->make($input, $rules); | ||
if ($validator->fails()) { | ||
print_r($validator->errors()->toArray()); | ||
} else { | ||
echo 'Validaton passed.' . PHP_EOL; | ||
} |