我想在我的项目中使用Doctrine,但我无法使用Entity Manager。 我创建了entites,存储库,配置文件和dbconnect,但它似乎没有正确完成。 你能查一下这段代码吗?也许我错过了一些非常小的东西。
我的dbconnect文件(它在init.php中引导):
<?php
namespace Projekt\Config;
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
$paths = array("Entity");
$isDevMode = false;
// the connection configuration
$dbParams = array(
'driver' => 'pdo_mysql',
'user' => 'root',
'password' => '',
'dbname' => 'projekt',
);
$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, null, null, false);
$em = EntityManager::create($dbParams, $config);
我的知识库示例:
<?php
namespace Projekt\Repository;
use Doctrine\ORM\EntityRepository;
/**
* Message
*
* This class was generated by the Doctrine ORM. Add your own custom
* repository methods below.
*/
class Message extends EntityRepository
{
public function getMessage($id)
{
$message = $this->find($id);
return $message;
}
public function getAllMessages()
{
}
public function createMessage()
{
}
public function updateMessage()
{
}
public function deleteMessage()
{
}
}
现在,当我尝试访问默认或自定义存储库方法时,我收到此错误:
Warning: Missing argument 1 for Doctrine\ORM\EntityRepository::__construct(),
called in F:\xampp\htdocs\mvc\app\Controllers\Messages.php
on line 15 and defined in F:\xampp\htdocs\mvc\vendor\doctrine\orm\lib\Doctrine\ORM\EntityRepository.php on line 64
EntityRepository.php中的第64行是__construct函数,它声明了entitymanager,但它似乎无法正常工作:
public function __construct($em, Mapping\ClassMetadata $class)
{
$this->_entityName = $class->name;
$this->_em = $em;
$this->_class = $class;
}
答案 0 :(得分:0)
我发现了两件事:
你的道路是相对的。我不确定,但我总是使用Entity文件夹的完整路径。您可以使用__DIR__轻松实现这一目标。根据您的命名空间,它应该看起来像:
$paths = array(__DIR__ . "/../Repository")
;
Doctrine需要知道在哪里找到您的实体和存储库。根据您的命名空间,我认为您的Repository文件存在于名为“Repository”的文件夹中,而不是“Entity”。
您不应将您的存储库命名为“消息”。实体应命名为“Message”,存储库应命名为“MessageRepository”。