我在控制器内部有一个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
答案 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将在构造函数之后访问数据库连接。
我让你弄清楚如何根据你的需要使用它。