Skip to content

Commit 7d85114

Browse files
Lidbetterpatrickbrouwers
authored andcommitted
fix presence verifier on lumen (#215)
1 parent 9e3d227 commit 7d85114

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

src/DoctrineServiceProvider.php

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ public function boot()
5454
$this->getConfigPath() => config_path('doctrine.php'),
5555
], 'config');
5656
}
57+
58+
$this->ensureValidatorIsUsable();
5759
}
5860

5961
/**
@@ -81,6 +83,26 @@ public function register()
8183
}
8284
}
8385

86+
protected function ensureValidatorIsUsable()
87+
{
88+
if(!$this->isLumen()) {
89+
return;
90+
}
91+
92+
if($this->shouldRegisterDoctrinePresenceValidator()) {
93+
// due to weirdness the default presence verifier overrides one set by a service provider
94+
// so remove them so we can re add our implementation later
95+
unset($this->app->availableBindings['validator']);
96+
unset($this->app->availableBindings['Illuminate\Contracts\Validation\Factory']);
97+
} else {
98+
// resolve the db,
99+
// this makes `isset($this->app['db']) == true`
100+
// which is required to set the presence verifier
101+
// in the default ValidationServiceProvider implementation
102+
$this->app['db'];
103+
}
104+
}
105+
84106
/**
85107
* Merge config
86108
*/
@@ -202,7 +224,11 @@ protected function registerExtensions()
202224
*/
203225
protected function registerPresenceVerifierProvider()
204226
{
205-
$this->app->register(PresenceVerifierProvider::class);
227+
$this->app->singleton('validator', function () {
228+
$this->app->register(PresenceVerifierProvider::class);
229+
230+
return $this->app->make('validator');
231+
});
206232
}
207233

208234
/**

src/Validation/PresenceVerifierProvider.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace LaravelDoctrine\ORM\Validation;
44

5+
use Illuminate\Validation\Factory;
56
use Illuminate\Validation\ValidationServiceProvider;
67

78
class PresenceVerifierProvider extends ValidationServiceProvider
@@ -13,6 +14,27 @@ class PresenceVerifierProvider extends ValidationServiceProvider
1314
*/
1415
protected $defer = true;
1516

17+
/**
18+
* Register the validation factory.
19+
*
20+
* @return void
21+
*/
22+
protected function registerValidationFactory()
23+
{
24+
$this->app->singleton('validator', function ($app) {
25+
$validator = new Factory($app['translator'], $app);
26+
27+
// The validation presence verifier is responsible for determining the existence of
28+
// values in a given data collection which is typically a relational database or
29+
// other persistent data stores. It is used to check for "uniqueness" as well.
30+
if (isset($app['registry']) && isset($app['validation.presence'])) {
31+
$validator->setPresenceVerifier($app['validation.presence']);
32+
}
33+
34+
return $validator;
35+
});
36+
}
37+
1638
/**
1739
* Register the database presence verifier.
1840
*

0 commit comments

Comments
 (0)