tfox/di-tools-bundle

Extended Depencency Injection features such as usage of injected into super class dependencies in sub classes, etc

1.0.0 2013-07-22 20:03 UTC

README

Add this link to your composer.json file:

"require": {

  ..

  "tfox/di-tools-bundle": "1.0.0"

  ..

}

...and run php composer.json update

The next step is to add to AppKernel.php the next line:

$bundles = array(
  ...
  new TFox\DiToolsBundle\TFoxDiToolsBundle()
  ...
);

Usage

Injection of a service into super class and all sub class controllers:

Here is provided a simple example of dependency injection using DiToolsBundle. For instance, we have two controllers:

  1. TestBundle\Controller\SuperController : A super class controller with protected property "entityManager". Our purpose is to inject here an Entity Manager so that it would be visible in sub class controllers.

  2. TestBundle\Controller\SubController, which extends a SuperController and uses its entity manager.

Our code will be like below:

//SuperController.php

namespace TestBundle\Controller;

use TFox\DiToolsBundle\Annotation as Di;
use TFox\DiToolsBundle\Controller\DiToolsInjectableInterface;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class SuperController extends Controller implements DiToolsInjectableInterface {

  /**
     * @Di\Inject("doctrine.orm.default_entity_manager")
     * @var \Doctrine\ORM\EntityManager
     */
    protected $entityManager;
}


//SubController.php

namespace TestBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration as Sensio;

/**
 * @Sensio\Route("/sub")
 */
class SubController extends SuperController {
  /**
     * @Sensio\Route
     * @Sensio\Template
     */
    public function indexAction()
    {
    //Any operations with injected entity manager here. For instance we will get some article
        $article = $this->entityManager->getRepository('TestBundle:Article')
            ->findOneById(1);

        return array('article' => $article);
    }
}