Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
Sandu Luca committed Jul 25, 2020
0 parents commit 5dde595
Show file tree
Hide file tree
Showing 6 changed files with 322 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/vendor/
composer.lock
54 changes: 54 additions & 0 deletions README.md
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

###
19 changes: 19 additions & 0 deletions composer.json
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/"
}
}
}
151 changes: 151 additions & 0 deletions src/ErrorMessages/en/validation.php
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' => [],

];
64 changes: 64 additions & 0 deletions src/ValidatorFactory.php
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);
}
}
32 changes: 32 additions & 0 deletions test/test.php
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;
}

0 comments on commit 5dde595

Please sign in to comment.