JMSDiExtraBundle
JMSDiExtraBundle copied to clipboard
Cannot instantiate abstract class BaseController if Child controller has nothing to inject
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
Issues related #186 and #39.
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.