JMSDiExtraBundle icon indicating copy to clipboard operation
JMSDiExtraBundle copied to clipboard

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

Open hehachris opened this issue 9 years ago • 2 comments

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:

  • Inject something useless in MyController

hehachris avatar Dec 16 '15 04:12 hehachris

Issues related #186 and #39.

stuzzo avatar Dec 16 '15 11:12 stuzzo

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.

jhonatanTeixeira avatar Jun 08 '16 02:06 jhonatanTeixeira