创建可以访问doctrine的symfony服务

时间:2017-02-18 18:31:12

标签: php symfony

我在控制器内部有一个signupAction。我希望这个signupAction调用另一个服务,然后创建一个帐户。所以我创建了一个名为AccountService的服务,它扩展了Controller,因为我希望能够访问doctrine($ 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

1 个答案:

答案 0 :(得分:0)

我相信从头开始的大多数人会使用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-&gt;类PdoConnection的db将在构造函数之后访问数据库连接。

我让你弄清楚如何根据你的需要使用它。