schmittjoh / JMSDiExtraBundle

Provides Advanced Dependency Injection Features for Symfony2
http://jmsyst.com/bundles/JMSDiExtraBundle
330 stars 130 forks source link

Cannot instantiate abstract class BaseController if Child controller has nothing to inject #228

Open hehachris opened 8 years ago

hehachris commented 8 years ago
class MyController extends BaseController
{
    // Nothing to inject
}

abstract class BaseController
{
    /**
     * @var Foo
     * @DI\Inject("my.foo")
     */
    protected $foo;
}

If there's nothing to inject in MyController, the following error occurs:

Error: Cannot instantiate abstract class MyBundle\BaseController

Current workaround:

stuzzo commented 8 years ago

Issues related #186 and #39.

jhonatanTeixeira commented 8 years ago

Hy. i found the problem and fixed it on my local bundle, the problem happens because the annotation driver returns null when the class has no annotations and the metadata factory needs at least a reflection class to build its metadata hierarchy.

to do quick local test go to your vendors and edit the class JMS\DiExtraBundle\Metadata\Driver\AnnotationDriver

and comment out these lines:

//        if (null == $metadata->id && !$hasInjection) {
//            return null;
//        }

these are on lines 225-227

I wonder if i can send a PR removing these lines, i wonder if these lines makes any difference at all to the bundle. I've also checked out the bundle and created a test case for this issue, and entire test suit is passing with this change.