2017 © Pedro Peláez
 

symfony-bundle vanio-di-extra-bundle

Allows to configure dependency injection using annotations

image

vanio/vanio-di-extra-bundle

Allows to configure dependency injection using annotations

  • Friday, May 25, 2018
  • by maryo
  • Repository
  • 9 Watchers
  • 0 Stars
  • 1,772 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 1 Versions
  • 15 % Grown

The README.md

Vanio Dependency Injection Extra Bundle

Build Status Coverage Status PHP7 License, (*1)

A Symfony2/3 Bundle providing an ability to resolve services by type by calling getByType on service container and lazily inject services or parameters into public properties of classes implementing ContainerAwareInterface (like controllers, CLI commands or Doctrine fixtures) using Inject annotation. JMS DI Extra Bundle has a similar annotation but it covers much more functionality. This bundle is lightweight and does not use AOP., (*2)

Example

<?php
namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Translation\TranslatorInterface;
use Vanio\DiExtraBundle\Controller;
use Vanio\DiExtraBundle\DependencyInjection\Metadata\Inject;

class HelloController extends Controller
{
    /**
     * @var TranslatorInterface
     * @Inject
     */
    public $translator;

    /**
     * @Route("/hello", name="app_hello")
     * @Template
     */
    public function helloAction(): array
    {
        return ['message' => $this->translator->trans('Hello world!')];
    }
}

It is also possible to inject a service using it's ID, (*3)

/**
 * @Inject("translator")
 */
public $translator;

It is also possible to inject an optional dependency which means that it does not throw exception when the service is not found., (*4)

/**
 * @Inject("translator", required=false)
 */
public $translator;

Injecting an optional dependency when injecting by type can be achieved using @var annotation., (*5)

/**
 * @var TranslatorInterface|null
 * @Inject
 */
public $translator;

Injecting of container parameters is also possible, (*6)

/**
 * @Inject("%kernel.cache_dir%/app")
 */
public $cacheDirectory;

All you need to do for using the Inject annotation is to use Vanio\DiExtraBundle\DependencyInjection\ContainerAwareTrait where you normally use the default Symfony\Component\DependencyInjection\ContainerAwareTrait. There is also an abstract Vanio\DiExtraBundle\Controller you can extend as a shortcut., (*7)

Installation

Installation can be done as usually using composer. composer require vanio/vanio-di-extra-bundle, (*8)

Next step is to register this bundle inside your AppKernel but you also have to tell the Kernel about the new getByType method by overriding getContainerBaseClass method., (*9)

// app/AppKernel.php
// ...

use Vanio\DiExtraBundle\DependencyInjection\Container;

class AppKernel extends Kernel
{
    // ...

    public function registerBundles(): array
    {
        $bundles = [
            // ...
            new Vanio\DiExtraBundle\VanioDiExtraBundle,
        ];

        // ...
    }

    public function getContainerBaseClass(): string
    {
        return Container::class;
    }
}

The Versions

25/05 2018

dev-master

9999999-dev https://github.com/vaniocz/vanio-di-extra-bundle

Allows to configure dependency injection using annotations

  Sources   Download

MIT

The Requires

 

The Development Requires

by Marek Štípek

dependency injection di