Skip to content

Commit 81cdec5

Browse files
committed
separate service providers to a new class
1 parent 66cee30 commit 81cdec5

File tree

5 files changed

+86
-41
lines changed

5 files changed

+86
-41
lines changed

index.php

+22-4
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,43 @@
88

99
require __DIR__ . '/vendor/autoload.php';
1010

11+
/**
12+
* instantiate the dependency injection $container object
13+
*/
1114
$container = new League\Container\Container;
1215

13-
$serviceProviders = new \PhpBootstrap\ServiceProviders();
14-
$controllerProviders = new \PhpBootstrap\ControllerProviders();
15-
$container->addServiceProvider($serviceProviders);
16-
$container->addServiceProvider($controllerProviders);
16+
/**
17+
* Register all service providers to $container
18+
*/
19+
\PhpBootstrap\ServiceProviders::register($container);
1720

21+
/**
22+
* instantiate $route object
23+
*/
1824
$route = new League\Route\RouteCollection($container);
1925

26+
/**
27+
* Register all routes mapping to $route object
28+
*/
2029
\PhpBootstrap\Routes::collections($route, $container);
2130

2231
try {
32+
/**
33+
* process the request
34+
*/
2335
$response = $route->dispatch(
2436
$container->get('request'),
2537
$container->get(\PhpBootstrap\Contracts\Response::class)
2638
);
2739
} catch (\League\Route\Http\Exception\NotFoundException $exception) {
40+
/**
41+
* handle 404
42+
*/
2843
$response = new \PhpBootstrap\Services\Response();
2944
$response = $response->errorNotFound();
3045
}
3146

47+
/**
48+
* Display the response
49+
*/
3250
$container->get('emitter')->emit($response);

src/ControllerProviders.php renamed to src/Providers/Controller.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
/**
33
* Created by PhpStorm.
44
* User: harry
5-
* Date: 2/13/18
6-
* Time: 11:53 AM
5+
* Date: 2/15/18
6+
* Time: 12:47 PM
77
*/
88

9-
namespace PhpBootstrap;
9+
namespace PhpBootstrap\Providers;
1010

1111
use League\Container\ServiceProvider\AbstractServiceProvider;
1212
use PhpBootstrap\Controller\HelloWorld;
@@ -16,7 +16,7 @@
1616
* @package PhpBootstrap
1717
* Handle all your controller dependency injection here
1818
*/
19-
class ControllerProviders extends AbstractServiceProvider
19+
class Controller extends AbstractServiceProvider
2020
{
2121
protected $provides = [
2222
'helloworldcontroller'

src/Providers/Library.php

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: harry
5+
* Date: 2/15/18
6+
* Time: 12:48 PM
7+
*/
8+
9+
namespace PhpBootstrap\Providers;
10+
11+
use League\Container\ServiceProvider\AbstractServiceProvider;
12+
use PhpBootstrap\Services\Hello;
13+
use PhpBootstrap\Contracts\Response as ResponseInterface;
14+
use Zend\Diactoros\ServerRequestFactory;
15+
use PhpBootstrap\Services\Response;
16+
17+
/**
18+
* Class ServiceProviders
19+
* @package PhpBootstrap
20+
* All your library/services need to be registered in the container
21+
*/
22+
class Library extends AbstractServiceProvider
23+
{
24+
protected $provides = [
25+
ResponseInterface::class,
26+
'request',
27+
'emitter',
28+
\PhpBootstrap\Contracts\Hello::class
29+
];
30+
31+
public function register()
32+
{
33+
$this->getContainer()->share(ResponseInterface::class, Response::class);
34+
35+
$this->getContainer()->share(
36+
'request',
37+
function () {
38+
return ServerRequestFactory::fromGlobals(
39+
$_SERVER, $_GET, $_POST, $_COOKIE, $_FILES
40+
);
41+
}
42+
);
43+
44+
$this->getContainer()->share('emitter', \Zend\Diactoros\Response\SapiEmitter::class);
45+
46+
// by registering the helloworld implementation as an alias of it's interface it
47+
// is easy to swap out for other implementations
48+
$this->getContainer()
49+
->add(\PhpBootstrap\Contracts\Hello::class, Hello::class);
50+
}
51+
}

src/Routes.php

-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111

1212
use League\Container\Container;
13-
use League\Route\Strategy\JsonStrategy;
1413
use PhpBootstrap\Middleware\ExampleMiddleware;
1514
use Psr\Http\Message\ResponseInterface;
1615
use Psr\Http\Message\ServerRequestInterface;

src/ServiceProviders.php

+9-32
Original file line numberDiff line numberDiff line change
@@ -8,40 +8,17 @@
88

99
namespace PhpBootstrap;
1010

11-
use League\Container\ServiceProvider\AbstractServiceProvider;
12-
use PhpBootstrap\Services\Hello;
13-
use PhpBootstrap\Contracts\Response as ResponseInterface;
14-
use Zend\Diactoros\ServerRequestFactory;
15-
use PhpBootstrap\Services\Response;
11+
use League\Container\Container;
1612

17-
18-
class ServiceProviders extends AbstractServiceProvider
13+
class ServiceProviders
1914
{
20-
protected $provides = [
21-
ResponseInterface::class,
22-
'request',
23-
'emitter',
24-
\PhpBootstrap\Contracts\Hello::class
25-
];
26-
27-
public function register()
15+
/**
16+
* Register all service provider here
17+
* @param Container $container
18+
*/
19+
public static function register(Container $container)
2820
{
29-
$this->getContainer()->share(ResponseInterface::class, Response::class);
30-
31-
$this->getContainer()->share(
32-
'request',
33-
function () {
34-
return ServerRequestFactory::fromGlobals(
35-
$_SERVER, $_GET, $_POST, $_COOKIE, $_FILES
36-
);
37-
}
38-
);
39-
40-
$this->getContainer()->share('emitter', \Zend\Diactoros\Response\SapiEmitter::class);
41-
42-
// by registering the helloworld implementation as an alias of it's interface it
43-
// is easy to swap out for other implementations
44-
$this->getContainer()
45-
->add(\PhpBootstrap\Contracts\Hello::class, Hello::class);
21+
$container->addServiceProvider(new \PhpBootstrap\Providers\Library());
22+
$container->addServiceProvider(new \PhpBootstrap\Providers\Controller());
4623
}
4724
}

0 commit comments

Comments
 (0)