2017 © Pedro Peláez
 

library lean

Use the league/container with auto-wiring support as the core container in Slim 3

image

jenssegers/lean

Use the league/container with auto-wiring support as the core container in Slim 3

  • Monday, June 25, 2018
  • by jenssegers
  • Repository
  • 2 Watchers
  • 15 Stars
  • 1,507 Installations
  • PHP
  • 2 Dependents
  • 0 Suggesters
  • 2 Forks
  • 1 Open issues
  • 7 Versions
  • 21 % Grown

The README.md

Lean

Latest Stable Version Build Status Coverage Status, (*1)

Lean allows you to use the PHP League's Container package with auto-wiring support as the core container in Slim 3., (*2)

Install

Via Composer, (*3)

``` bash $ composer require jenssegers/lean, (*4)


## Usage The easiest way to start using Lean is simply creating a `Jenssegers\Lean\App` instance: ``` php require 'vendor/autoload.php'; $app = new \Jenssegers\Lean\App(); $app->get('/hello/{name}', function (Request $request, Response $response, string $name) { return $response->write('Hello, ' . $name); }); $app->run();

Behind the scenes, a Slim application is bootstrapped by adding all of the required Slim components to League's container., (*5)

Service Providers

Service providers give the benefit of organising your container definitions along with an increase in performance for larger applications as definitions registered within a service provider are lazily registered at the point where a service is retrieved., (*6)

To build a service provider it is as simple as extending the base service provider and defining what you would like to register., (*7)

use League\Container\ServiceProvider\AbstractServiceProvider;

class SomeServiceProvider extends AbstractServiceProvider
{
    /**
     * The provided array is a way to let the container
     * know that a service is provided by this service
     * provider. Every service that is registered via
     * this service provider must have an alias added
     * to this array or it will be ignored.
     */
    protected $provides = [
        SomeInterface::class,
    ];

    /**
     * This is where the magic happens, within the method you can
     * access the container and register or retrieve anything
     * that you need to, but remember, every alias registered
     * within this method must be declared in the `$provides` array.
     */
    public function register()
    {
        $this->getContainer()
            ->add(SomeInterface::class, SomeImplementation::class);
    }
}

To register this service provider with the container simply pass an instance of your provider or a fully qualified class name to the League\Container\Container::addServiceProvider method., (*8)

$app = new \Jenssegers\Lean\App();
$app->getContainer()->addServiceProvider(\Acme\ServiceProvider\SomeServiceProvider::class);

Read more about service providers here., (*9)

Settings

You can access Slim's internal configuration through the settings key on the container:, (*10)

$app = new \Jenssegers\Lean\App();

$app->getContainer()->get('settings')['displayErrorDetails'] = true;

Alternatively, an alias is registered that allows a bit more fluent way of working with settings:, (*11)

$app = new \Jenssegers\Lean\App();

$app->getContainer()->get(\Slim\Settings::class)->set('displayErrorDetails', true);

Read more about the available configuration options here., (*12)

Route arguments

By default, Lean will use method injection to pass arguments to your routes. This allows you to type-hint dependencies on method level (similar to the Laravel framework)., (*13)

Route arguments will be passed as individual arguments to your method:, (*14)

$app->get('/books/{id}', function (Request $request, Response $response, string $id) {
    ...
});

They are also accessible through the getAttribute method., (*15)

$app->get('/books/{id}', function (Request $request, Response $response) {
    $id = $request->getAttribute('id');
    ....
});

If you want to disable this behaviour and use the default Slim way of route arguments, you can disable this feature be setting methodInjection to false:, (*16)

$app->getContainer()->get(\Slim\Settings::class)->set('methodInjection', false);

Read more about routes here., (*17)

Error Handlers

By default, Lean uses Slim's error handlers. There are different ways to implement an error handler for Slim, read more about them here., (*18)

Typically you would create a custom error handler class that looks like this:, (*19)

class CustomErrorHandler
{
    public function __invoke(ServerRequestInterface $request, Response $response, Throwable $exception)
    {
        return $response->withJson([
            'error' => 'Something went wrong',
        ], 500);
    }
}

Then you overwrite the default handler by adding it to the container:, (*20)

$app = new Jenssegers\Lean\App();

$app->getContainer()->share('errorHandler', function () {
    return new CustomErrorHandler();
});

Ideally, you would put this code inside a service provider. Read more about service providers above., (*21)

Testing

bash $ php ./vendor/bin/phpunit, (*22)

License

The MIT License (MIT)., (*23)

The Versions

25/06 2018

dev-master

9999999-dev https://github.com/jenssegers/lean

Use the league/container with auto-wiring support as the core container in Slim 3

  Sources   Download

MIT

The Requires

 

The Development Requires

container league slim

25/06 2018

v0.3.0

0.3.0.0 https://github.com/jenssegers/lean

Use the league/container with auto-wiring support as the core container in Slim 3

  Sources   Download

MIT

The Requires

 

The Development Requires

container league slim

21/09 2017

v0.2.2

0.2.2.0 https://github.com/jenssegers/lean

Use the league/container with auto-wiring support as the core container in Slim 3

  Sources   Download

MIT

The Requires

 

The Development Requires

container league slim

19/09 2017

v0.2.1

0.2.1.0 https://github.com/jenssegers/lean

Use the league/container with auto-wiring support as the core container in Slim 3

  Sources   Download

MIT

The Requires

 

The Development Requires

container league slim

18/09 2017

v0.2.0

0.2.0.0 https://github.com/jenssegers/lean

Use the league/container with auto-wiring support as the core container in Slim 3

  Sources   Download

MIT

The Requires

 

The Development Requires

container league slim

15/09 2017

v0.1.1

0.1.1.0 https://github.com/jenssegers/lean

Use the league/container with auto-wiring support as the core container in Slim 3

  Sources   Download

MIT

The Requires

 

The Development Requires

container league slim

22/11 2015

v0.1.0

0.1.0.0 https://github.com/jenssegers/lean

Use the league/container with auto-wiring support as the core container in Slim 3

  Sources   Download

MIT

The Requires

 

The Development Requires

container league slim