【发布时间】:2017-02-18 18:31:11
【问题描述】:
我在控制器中有一个 signupAction。我希望这个 signupAction 调用另一个服务,然后创建一个帐户。因此,我创建了一个名为 AccountService 的服务,它扩展了 Controller,因为我想访问学说 ($this->getDoctrine()...) 以便将帐户保存到数据库中。但是,当我无法提供服务时,它会告诉我它无法访问容器(null)。
if (!$this->container->has('doctrine')) {
上述行失败,因为容器为空。
这就是我调用服务的方式:
$accountService = $this->get('app.account');
$accountService->createAccount($account);
我在 services.yml 中将其配置为:
services:
app.account:
class: AppBundle\Service\AccountService
谁能帮我弄清楚如何让它工作?或者作为一个更好的想法,如何在控制器中的操作中调用服务来处理数据库而不是全部?
我有 symfony 3.2
【问题讨论】:
-
您将控制器与服务混淆了。在大多数情况下,服务不会从控制器扩展。相反,服务是独立的类,您可以在其中注入您的实体管理器或存储库。浏览此内容以获取更多详细信息:symfony.com/doc/current/…
-
啊,谢谢,只需要弄清楚 Doctrine 的论点是@doctrine
-
实际上,您可能不需要教义,而是需要实体管理器,即“@doctrine.orm.default_entity_manager”服务。
-
除非我有教义,否则我可以从中获得实体管理器
-
当然可以,但为什么呢?依赖注入的一个要点是只注入你需要的东西。