Skip to content

Commit f563bbd

Browse files
committed
Base Functionality
1 parent 0c3b86e commit f563bbd

File tree

3 files changed

+92
-11
lines changed

3 files changed

+92
-11
lines changed

composer.json

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
{
2-
"name": "lextira/larvel-formrequest-singleton",
3-
"description": "Use Laravel's excellent FormRequest as Singleton.",
4-
"license": "MIT",
5-
"require": {
6-
"php" : "^7.0",
7-
"laravel/framework": "^6.0"
8-
},
9-
"autoload": {
10-
"psr-4" : {
11-
"Lextira\\FormRequestSingleton\\" : "src/"
12-
}
2+
"name": "lextira/laravel-formrequest-singleton",
3+
"description": "Use Laravel's excellent FormRequest as Singleton.",
4+
"license": "MIT",
5+
"require": {
6+
"php" : "^7.0",
7+
"laravel/framework": "^6.0"
8+
},
9+
"autoload": {
10+
"psr-4" : {
11+
"Lextira\\FormRequestSingleton\\" : "src/"
1312
}
13+
}
1414
}

src/FormRequestServiceProvider.php

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<?php
2+
3+
namespace Lextira\FormRequestSingleton;
4+
5+
use Illuminate\Contracts\Foundation\Application;
6+
use Illuminate\Contracts\Validation\ValidatesWhenResolved;
7+
use Illuminate\Foundation\Http\FormRequest;
8+
use Illuminate\Http\Request;
9+
use Illuminate\Routing\Redirector;
10+
use Illuminate\Support\ServiceProvider;
11+
12+
class FormRequestServiceProvider extends ServiceProvider
13+
{
14+
/**
15+
* Register the service provider.
16+
*
17+
* @return void
18+
*/
19+
public function register()
20+
{
21+
//
22+
}
23+
24+
/**
25+
* Bootstrap the application services.
26+
*
27+
* @return void
28+
*/
29+
public function boot()
30+
{
31+
$this->app->resolving(FormRequest::class, function ($request, Application $app) {
32+
33+
// if the request is already bound, we don't need to do anything.
34+
if ($app->bound(get_class($request))) {
35+
return;
36+
}
37+
38+
// but if not, we resolve a new FromRequest and register it as singleton.
39+
$this->resolveFormRequestAndRegisterAsSingleton($request, $app);
40+
});
41+
}
42+
43+
/**
44+
* Resolve a new FormRequest instance and bind it as singleton.
45+
*
46+
* @param \Illuminate\Http\Request $request
47+
* @param \Illuminate\Contracts\Foundation\Application $app
48+
* @throws
49+
*/
50+
protected function resolveFormRequestAndRegisterAsSingleton(Request $request, Application $app)
51+
{
52+
$request = FormRequest::createFrom($app['request'], $request);
53+
54+
$request->setContainer($app)->setRedirector($app->make(Redirector::class));
55+
56+
if ($request instanceof ValidatesWhenResolved) {
57+
$request->validateResolved();
58+
}
59+
60+
$app->singleton(get_class($request), function(Application $app) use ($request) {
61+
return $request;
62+
});
63+
}
64+
}

src/FoundationServiceProvider.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace Lextira\FormRequestSingleton;
4+
5+
use Illuminate\Foundation\Providers\FoundationServiceProvider as IlluminateFoundationServiceProvider;
6+
7+
class FoundationServiceProvider extends IlluminateFoundationServiceProvider
8+
{
9+
/**
10+
* The provider class names.
11+
*
12+
* @var array
13+
*/
14+
protected $providers = [
15+
FormRequestServiceProvider::class,
16+
];
17+
}

0 commit comments

Comments
 (0)