Doctrine 2 找不到实体类

Posted

技术标签:

【中文标题】Doctrine 2 找不到实体类【英文标题】:Doctrine 2 can't find entities classes 【发布时间】:2012-09-14 20:51:34 【问题描述】:

我无法让 Doctrine 找到位于 www/entities/.. 中的实体类。

我不断收到错误“致命错误:第 7 行的 /home/dxs/public_html/create-event.php 中找不到类 'Event'”.. 我觉得我几乎尝试了所有东西..

我调用的文件是:

创建事件.php

<?php
require_once("bootstrap.php");
require_once("entities/Event.php");
$name = $argv[1];
$description = $argv[2];

$event1 = new Event;
$event1->setName("test");
$event1->setDescription("testdesc");

$entityManager->persist($event1);
$entityManager->flush();

echo "Created Event with ID " . $event1->getId() . "\n";

Bootstrap.php

<?php
use Doctrine\ORM\EntityRepository;

if(!class_exists("Doctrine\Common\Version", FALSE))



    require_once 'bootstrap_doctrine.php';


引导

<?php
use Doctrine\ORM\EntityRepository;

if(!class_exists("Doctrine\Common\Version", FALSE))


    require_once 'bootstrap_doctrine.php';


更新了引导原则

 <?php
define('DS', DIRECTORY_SEPARATOR);
define('ROOT', dirname(dirname(__FILE__)));

use Doctrine\ORM\Tools\Setup;
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Annotations\AnnotationRegistry;

require_once "Doctrine/ORM/Tools/Setup.php";

Setup::registerAutoloadPEAR();
$cl = new Doctrine\Common\ClassLoader('Entities', __DIR__);
$cl->register();

$isDevMode = true;

$path = array(__DIR__.'/entities');
$config = Setup::createAnnotationMetadataConfiguration($path, $isDevMode);

// database configuration parameters
$conn = array(
    'driver' => 'pdo_mysql',
    'user' => 'dxs',
    'password' => 'pass',
    'dbname' => 'db'

);
// obtaining the entity manager
$entityManager = \Doctrine\ORM\EntityManager::create($conn, $config);   

AnnotationRegistry::registerFile("/usr/local/lib/php/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php");
AnnotationRegistry::registerAutoloadNamespace("Symfony\Component\Validator\Constraint", "/usr/local/lib/php/Doctrine/Symfony");
AnnotationRegistry::registerAutoloadNamespace("MyProject\Annotations", ROOT.DS.'www');

$reader = new AnnotationReader();
AnnotationReader::addGlobalIgnoredName('dummy');

我做错了什么?

使用注释更新事件类

事件类

<?php
namespace Entities\Event;
use Doctrine\ORM\Mapping AS ORM;

/**
 * @ORM\Entity
 * @Table(name="events")
 * @Annotations\Event
 */
class Event

    /** @ORM\Id @GeneratedValue
     *  @var int
     */
    protected $id;

    /**
     * @ORM\Column(type="string")
     * @Assert\NotEmpty
     * @var string
     */
    protected $name;

【问题讨论】:

我将它包含在我的事件实体类命名空间实体中;使用 Doctrine\ORM\Mapping 作为 ORM; 感谢您添加实体 - 最好将新的错误消息添加到您的帖子更新中,以便查看者清楚地了解正在解决的问题。 【参考方案1】:

查看此文档 doctrine annotations 了解定义实体的正确方法。

例如您需要在开场评论中使用* @ORM\Entity

【讨论】:

我遵循了教义注释,但我仍然收到错误:实体\事件不是有效的实体或映射的超类。'在 /usr/local/lib/php/Doctrine/ORM/Mapping/MappingException.php:147 这可能不是实际的解决方案,但如果您想使用验证约束 (@Assert\NotEmpty),您肯定需要将它们包含在您的项目中。例如。您从中获取该行的 Doctine 文档具有“使用 Symfony\Component\Validation\Constraints AS Assert;”在您的情况下,您可能应该删除 @Assert 直到您没有它的工作。 我看到它在您的自动加载器中,但您错过了实体的使用声明。 我得到了它的工作,原来我的服务器在错误的文件夹中查找实体,我有一个实体文件夹有两个地方..但感谢您的帮助 @Saggo 你是怎么解决的?我有同样的问题,我尝试使用 --path 参数...

以上是关于Doctrine 2 找不到实体类的主要内容,如果未能解决你的问题,请参考以下文章

Doctrine 2 中的代理是啥?

在 Doctrine 2 / CodeIgniter 2 中找不到实体模型

在 Doctrine2 上找不到实体异常

Doctrine 找不到目标实体

在Doctrine2上找不到实体

Symfony 5 和 Doctrine,找不到使用 3 个相关实体获取结果的方法