91 lines
2.3 KiB
Markdown
91 lines
2.3 KiB
Markdown
|
|
# MetaTech\Silex\ControllerServiceProvider
|
|
|
|
A service provider for [ Silex ](http://silex.sensiolabs.org) for managing DI and mounting on controllers.
|
|
|
|
### Requirements
|
|
|
|
PHP 7.0
|
|
|
|
### Install
|
|
|
|
The package can be installed using [ Composer ](https://getcomposer.org/). (not yet)
|
|
```
|
|
composer require meta-tech/silex-controller-service
|
|
```
|
|
|
|
Or add the package to your `composer.json`.
|
|
|
|
```
|
|
"require": {
|
|
"meta-tech/silex-controller-service" : "1.0"
|
|
}
|
|
```
|
|
|
|
## Usage
|
|
|
|
The provider will create a service relative to a Controller instance builded with its dependencies.
|
|
If the controller implements the `Silex\Api\ControllerProviderInterface` the provider will also
|
|
mount the controller 's routes to the defined routing entry point
|
|
|
|
## Example
|
|
|
|
Admit you have a controller Test with dependencies on instanciation :
|
|
|
|
```php
|
|
class Test implements ControllerProviderInterface
|
|
{
|
|
public function __construct(Application $app)
|
|
{
|
|
// do stuff
|
|
}
|
|
```
|
|
|
|
You can use the ControllerServiceProvider to create a service to manage your
|
|
controller class instanciation :
|
|
|
|
```php
|
|
|
|
use MetaTech\Silex\Provider\ControllerServiceProvider;
|
|
use Acme\Ctrl\Test;
|
|
...
|
|
|
|
$app->register(new ControllerServiceProvider(Test::class, [$app], '/test', 'ctrl.'));
|
|
|
|
```
|
|
**first parameter** is your *controller class*
|
|
**second parameter** is an array of your *controller depencies*
|
|
**third parameter** define your controller *routing entry point*
|
|
**fouth parameter** define your *service 's namespace* to acces your controller (default ctrl.)
|
|
|
|
the name of the registering service is the *given namespace* followed by your *controller class shortname*
|
|
|
|
with the previous example `$app['ctrl.Test']` is now available and return your controller instance.
|
|
|
|
the `connect` method of your controller can now benefits of this service to define appropriate routes, like that :
|
|
|
|
```php
|
|
class Test implements ControllerProviderInterface
|
|
{
|
|
...
|
|
|
|
public function connect(Application $app)
|
|
{
|
|
$collection = $app['controllers_factory'];
|
|
$_ = 'ctrl.Test';
|
|
|
|
$collection->match('/' , "$_:index");
|
|
$collection->match('/test', "$_:test");
|
|
|
|
return $collection;
|
|
}
|
|
}
|
|
```
|
|
|
|
see source code of `MetaTech\Core\Ws` for an advance controller architecture.
|
|
|
|
|
|
### License
|
|
|
|
The project is released under the MIT license, see the LICENSE file.
|