无法启用doctrine的实体管理器

时间:2016-06-29 07:54:18

标签: php doctrine-orm

我想在我的项目中使用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;
}

1 个答案:

答案 0 :(得分:0)

我发现了两件事:

  1. 你的道路是相对的。我不确定,但我总是使用Entity文件夹的完整路径。您可以使用__DIR__轻松实现这一目标。根据您的命名空间,它应该看起来像:

    $paths = array(__DIR__ . "/../Repository");

  2. Doctrine需要知道在哪里找到您的实体和存储库。根据您的命名空间,我认为您的Repository文件存在于名为“Repository”的文件夹中,而不是“Entity”。

    1. 您是否正确定义了实体类?您的Repository类对我来说没问题,但只有拥有有效的Entity类才能正常工作。
    2. 您不应将您的存储库命名为“消息”。实体应命名为“Message”,存储库应命名为“MessageRepository”。