Config Symfony2 and Doctrine



无论如何,我也是Symfony2和Doctrine的新手。我正在尝试配置我的学说,以便我可以在我的Symfony2项目中使用它。

创建了一个数据库存储库文件,我正在其中进行连接。当我执行此文件时,出现错误:

Catchable fatal error: Argument 1 passed to DatabaseRepository::__construct() must be an instance of DoctrineDBALConnection, none given, called in app/cache/dev/appDevDebugProjectContainer.php on line 2363

我的数据库存储库文件:

<?php
namespace AcmeDemoBundleDoctrine;
use DoctrineDBALConnection;
use DoctrineDBALDBALException;
use PsrLogLoggerInterface;
class DatabaseRepository
{
    /**
     * @var Connection
     */
    protected $db;
    /**
     * @var LoggerInterface
     */
    protected $logger;
    /**
     * @param Connection $connection
     * @param LoggerInterface $logger
     */
    public function __construct(
        Connection $connection,
        LoggerInterface $logger
    ) {
        $this->db = $connection;
        $this->logger = $logger;
    }
}

原则位于供应商目录下。我正在使用use来添加连接,但这仍然不起作用。

好的伙计们对不起,我认为这个问题不完整,我将所有这些。

这就是我调用我的数据库存储库的地方:

namespace AcmeDemoBundleRepository;
use AcmeDemoBundleDoctrineDatabaseRepository;
class TestRepo {
    public $doctrine;
    public function __construct(
        DatabaseRepository $databaseRepository
    ){
        $this->doctrine = $databaseRepository;
    }

    public function test()
    {
    }
} 

以下是服务:

<!-- Doctrine -->
<service id="database_repository"
         class="AcmeDemoBundleDoctrineDatabaseRepository">
        <argument type="service" id="DoctrineDBALConnection" />
        <argument type="service" id="PsrLogLoggerInterface" />
</service>
<service id="test_repo"
         class="AcmeDemoBundleRepositoryTestRepo">
    <argument type="service" id="database_repository" />
</service>

正如下面的评论中所指出的那样,我添加了用于database_repository服务的参数。

但是现在我收到此错误:

Fatal error: Uncaught exception 'SymfonyComponentDependencyInjectionExceptionServiceNotFoundException' with message 'The service "jdatabase_repository" has a dependency on a non-existent service "doctrinedbalconnection"

您的database_repository配置不包含任何映射构造函数参数的argument节。简而言之,您不提供DatabaseRepositoryLoggerInterface实例的重新请求参数。

有一个database_connection服务代表第一个服务。有关如何在Symfony中使用DBAL的更多信息,请单击此处

因此,要将其添加到您的 conf 文件中,您应该像这样修改它:

<service id="database_repository"
         class="AcmeDemoBundleDoctrineDatabaseRepository">
    <argument type="service" id="database_connection" />
</service>

您还必须添加LoggerInterface实例,但这超出了Symfony,因此您必须首先为此创建一个服务。

另请参阅服务容器文档,以了解服务在Symfony2中的工作方式

相关内容

  • 没有找到相关文章

最新更新