Skip to content

TomasVotruba/symfony-legacy-controller-autowire

Repository files navigation

Controller Autowire for Symfony 2.8

This bundle does only 2 things:

  • 1. registers controllers as services
  • 2. enables constructor autowiring for them

Still wondering why use controller as services? Check this and this article.

Install

composer require tomasvotruba/symfony-legacy-controller-autowire

Add bundle to AppKernel.php:

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = [
            new TomasVotruba\SymfonyLegacyControllerAutowire\SymplifyControllerAutowireBundle(),
            // ...
        ];
    }
}

Usage

class SomeController
{
    private $someClass;

    public function __construct(SomeClass $someClass)
    {
        $this->someClass = $someClass;
    }
}

Used to FrameworkBundle's controller? Use helpers traits!

Inspired by pull requests to Symfony and setter injection that are currently on-hold, here are the traits you can use right now:

use TomasVotruba\SymfonyLegacyControllerAutowire\Controller\Routing\ControllerAwareTrait;

final class SomeController
{
    use ControllerAwareTrait;

    public function someAction()
    {
        $productRepository = $this->getDoctrine()->getRepository(Product::class);
        // ...

        return $this->redirectToRoute('my_route');
    }
}

Do you prefer only traits you use?

use TomasVotruba\SymfonyLegacyControllerAutowire\Controller\Routing\ControllerRoutingTrait;

final class SomeController
{
    use ControllerRoutingTrait;

    public function someAction()
    {
        return $this->redirectToRoute('my_route');
    }
}

Just type Controller*Trait in your IDE to autocomplete any of these traits.

That's all :)

Contributing

Send issue or pull-request to main repository.