【问题标题】:Creating a symfony service that can access doctrine创建一个可以访问学说的 symfony 服务
【发布时间】: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”服务。
  • 除非我有教义,否则我可以从中获得实体管理器
  • 当然可以,但为什么呢?依赖注入的一个要点是只注入你需要的东西。

标签: php symfony


【解决方案1】:

我相信大多数从零开始的人都会使用 ORM,但我没有使用,因为我有现有的 PHP 代码可以使用 PDO SQL。这是一个展示如何访问 Doctrine DB 连接的示例:

在 [YourBundle]\Resources\config\services.yml

services:

     #dependency injection services
         pdo_connection:
              class: [YourBundle]\DependencyInjection\PDOManagement\PdoConnection
              arguments: ["@doctrine.dbal.default_connection"]

然后在 [YourBundle]\DependencyInjection\PDOManagement\PdoConnection.php 中

<?php
namespace [YourBundle]\DependencyInjection\PDOManagement;

use Doctrine\DBAL;


    class PdoConnection {

        protected $db;

        public function __construct($dbalConnection){
            $this->db = $dbalConnection;
        }

    }
?>

this->类PdoConnection的db将在构造函数后访问数据库连接。

我让你根据自己的需要想办法使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-16
    • 2016-09-21
    • 1970-01-01
    • 2011-08-12
    • 2017-04-07
    • 2016-11-09
    • 2012-06-11
    • 1970-01-01
    相关资源
    最近更新 更多