我还是Symfony2和Doctrine的新手。我正在尝试配置我的Doctrine,以便我可以在Symfony2项目中使用它。
我创建了一个DatabaseRepository文件,我正在进行连接。当我执行此文件时,我收到一个错误:
Catchable fatal error: Argument 1 passed to DatabaseRepository::__construct() must be an instance of Doctrine\DBAL\Connection, none given, called in app/cache/dev/appDevDebugProjectContainer.php on line 2363
我的DatabaseRepository文件:
<?php
namespace Acme\DemoBundle\Doctrine;
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\DBALException;
use Psr\Log\LoggerInterface;
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;
}
}
doctrine位于Vendor目录下。我使用use
添加连接,但这仍然不起作用。
好的家伙很抱歉我认为这个问题不完整我会这些。
这就是我调用DatabaseRepository的地方:
namespace Acme\DemoBundle\Repository;
use Acme\DemoBundle\Doctrine\DatabaseRepository;
class TestRepo {
public $doctrine;
public function __construct(
DatabaseRepository $databaseRepository
){
$this->doctrine = $databaseRepository;
}
public function test()
{
}
}
以下是服务:
<!-- Doctrine -->
<service id="database_repository"
class="Acme\DemoBundle\Doctrine\DatabaseRepository">
<argument type="service" id="Doctrine\DBAL\Connection" />
<argument type="service" id="Psr\Log\LoggerInterface" />
</service>
<service id="test_repo"
class="Acme\DemoBundle\Repository\TestRepo">
<argument type="service" id="database_repository" />
</service>
如下面的评论中所述,我添加了用于我的database_repository服务的参数。
但现在我收到了这个错误:
Fatal error: Uncaught exception 'Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException' with message 'The service "jdatabase_repository" has a dependency on a non-existent service "doctrine\dbal\connection"
答案 0 :(得分:2)
您的database_repository
配置不包含映射构造函数参数的任何argument
部分。简而言之,您不会提供DatabaseRepository
和LoggerInterface
个实例的已重新参数。
有一个database_connection
服务代表第一个服务。有关如何在Symfony中使用DBAL的更多信息here
因此,要将其添加到conf文件中,您应该像这样修改它:
<service id="database_repository"
class="Acme\DemoBundle\Doctrine\DatabaseRepository">
<argument type="service" id="database_connection" />
</service>
您还必须添加LoggerInterface
实例,但这不是Symfony,因此您必须首先为此创建服务。
请参阅Service Container documentation以了解服务在Symfony2中的运作方式