forked from BenSampo/laravel-enum
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEnumServiceProvider.php
106 lines (89 loc) · 2.91 KB
/
EnumServiceProvider.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
namespace BenSampo\Enum;
use Doctrine\DBAL\Types\Type;
use BenSampo\Enum\Rules\Enum;
use BenSampo\Enum\Rules\EnumKey;
use BenSampo\Enum\Rules\EnumValue;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Validator;
use BenSampo\Enum\Commands\MakeEnumCommand;
use BenSampo\Enum\Commands\EnumAnnotateCommand;
use BenSampo\Enum\Commands\ModelAnnotateCommand;
class EnumServiceProvider extends ServiceProvider
{
/**
* Perform post-registration booting of services.
*
* @return void
*/
public function boot()
{
$this->bootCommands();
$this->bootValidationTranslation();
$this->bootValidators();
$this->bootDoctrineType();
}
/**
* Boot the custom commands
*
* @return void
*/
private function bootCommands()
{
$this->publishes([
__DIR__.'/Commands/stubs' => $this->app->basePath('stubs')
], 'stubs');
if ($this->app->runningInConsole()) {
$this->commands([
EnumAnnotateCommand::class,
MakeEnumCommand::class,
]);
}
}
/**
* Boot the custom validators
*
* @return void
*/
private function bootValidators()
{
$this->app['validator']->extend('enum_key', function ($attribute, $value, $parameters, $validator) {
$enum = $parameters[0] ?? null;
return (new EnumKey($enum))->passes($attribute, $value);
}, __('laravelEnum::messages.enum_key'));
$this->app['validator']->extend('enum_value', function ($attribute, $value, $parameters, $validator) {
$enum = $parameters[0] ?? null;
$strict = $parameters[1] ?? null;
if (! $strict) {
return (new EnumValue($enum))->passes($attribute, $value);
}
$strict = !! json_decode(strtolower($strict));
return (new EnumValue($enum, $strict))->passes($attribute, $value);
}, __('laravelEnum::messages.enum_value'));
$this->app['validator']->extend('enum', function ($attribute, $value, $parameters, $validator) {
$enum = $parameters[0] ?? null;
return (new Enum($enum))->passes($attribute, $value);
}, __('laravelEnum::messages.enum'));
}
/**
* Boot the Doctrine type.
*
* @return void
*/
private function bootDoctrineType()
{
// Not included by default in Laravel
if (class_exists('Doctrine\DBAL\Types\Type')) {
if (! Type::hasType(EnumType::ENUM)) {
Type::addType(EnumType::ENUM, EnumType::class);
}
}
}
private function bootValidationTranslation()
{
$this->publishes([
__DIR__.'/../resources/lang' => resource_path('lang/vendor/laravelEnum'),
], 'translations');
$this->loadTranslationsFrom(__DIR__.'/../resources/lang/', 'laravelEnum');
}
}