这是一个Symfony新手 . 在SO阅读了一些Symfony文档和一些答案后,我现在几乎完全糊涂了 . 我正在尝试使用控制台应用程序组件并创建一个小型的db-aware控制台应用程序 .
许多人声称,为了使用Symfony的DI功能,继承我的命令类就足够了,而不是从Symfony \ Component \ Console \ Command \ Command继承,而是从ContainerAwareCommand继承 . 但是,当我尝试这个时,我在application :: getKernel()调用上得到一个Method Not Found错误 .
我感觉DI功能实际上在基于控制台组件的控制台应用程序中不可用 . 是否有另一种Symfony控制台应用程序,例如,基于完整的框架?
我非常喜欢控制台组件Symfony \ Component \ Console \ Application提供的简单框架 . 但问题是 - 如何处理依赖注入和DBAL?我找到的所有示例似乎都引用了完整的Symfony框架,让我更加困难 .
3 回答
如果有人遇到同样的问题,只需快速更新我的进度 .
我在我的项目中加入了PHP-DI依赖注入框架,它似乎在没有配置的情况下运行得相当好(到目前为止) - 它实际上通过反射得出了很多 .
同样的方式,Doctrine \ DBAL作为一个独立的库包含在内(我选择了它的O / RM部分,因为它实际上是一个很小的项目,而且我在SQL上比其他任何东西都要坚定得多)和连接提供者只需返回连接,该连接提供者在DI需要的地方注入 .
我无法弄清楚的一件事是如何在没有我帮助的情况下让DI库实例化命令类,所以我实际上必须将容器本身注入我重写的应用程序类并覆盖
getDefaultCommands()
然后我将实例拉出容器手动 . 不理想,但现在必须做 .如果你的命令扩展
ContainerAwareCommand
DI容器可以使用
getContainer()
方法 . (比如在标准控制器中),例如:我不知道你的问题是否仍然相关,但我有一个答案,因为我偶然发现了同样的问题 .
您只需自己创建内核并将其提供给扩展基本\ Symfony \ Component \ Console \ Application的\ Symfony \ Bundle \ FrameworkBundle \ Console \ Application .