【问题标题】:Symfony2 - Doctrine: Redefinition of a class issueSymfony2 - 教义:重新定义类问题
【发布时间】:2012-06-20 09:57:56
【问题描述】:

我有一个奇怪的问题。
我对 symfony2 完全陌生,如果这是一个愚蠢的问题,请原谅我。

但是,我正在尝试创建两个实体,它们会将持久数据保存到数据库中,并且这两个实体将一个用于用户,一个用于组。
我在tutorial 之后定义了这两个类,一切似乎都很好,因为我只创建了第一个实体并运行php app/console doctrine:schema:update --force - 顺便说一句,数据库已经创建了!。

第二次我决定创建第二个实体(它将与第一个实体有关系,我决定使用学说符号来定义该关系)。

这是我的重要代码

 // src/Sestante/UserBundle/Entity/User.php
 [...]
 /**
 * @ORM\ManyToMany(targetEntity="GroupAndRoles", inversedBy="users")
 *
 */
 private $groups;
 [...]

// src/Sestante/UserBundle/Entity/GroupAndRoles.php
<?php

namespace Sestante\Bundle\UserBundle\Entity;

use Symfony\Component\Security\Core\Role\RoleInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(name="groups")
 * @ORM\Entity()
 */
class GroupAndRoles implements RoleInterface
{
    /**
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id()
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\Column(name="name", type="string", length=30)
     */
    private $name;

    /**
     * @ORM\Column(name="role", type="string", length=20, unique=true)
     */
    private $role;

    /**
     * @ORM\ManyToMany(targetEntity="User", mappedBy="groups")
     */
    private $users;

    public function __construct()
    {
        $this->users = new ArrayCollection();
    }

    // ... getters and setters for each property

    /**
     * @see RoleInterface
     */
    public function getRole()
    {
        return $this->role;
    }
}
?>

当我再次运行 php app/console doctrine:schema:update --force 时,我得到了这个错误

致命错误:无法在第 13 行的 /var/www/html/symfony/Symfony/src/Sestante/UserBundle/Entity/GroupAndRoles.php 中重新声明类 Sestante\Bundle\UserBundle\Entity\GroupAndRoles

此外,我试图从我的应用程序的根目录中找到一个文件,在该文件中可以使用该命令 find . -type f -exec grep Sestante\Bundle\UserBundle\Entity\GroupAndRoles {} \; 重新定义该实体,但没有产生任何结果。

我想我错过了一些东西,也许是缓存或与之相关的东西? (阅读 symfony 书中的一章,其中讲述了一些相关内容,但不记得了)。

【问题讨论】:

    标签: class symfony doctrine-orm doctrine


    【解决方案1】:

    这可能只是一个错字,但您发布的文件摘录顶部的 cmets 中的文件路径与您的致命错误和命名空间声明中的不同。您在src/Sestante/UserBundle/Entity/GroupAndRoles.phpsrc/UserBundle/GroupAndRoles.php 是否有重复文件?

    【讨论】:

    • 不,抱歉。那是我的一个错误。现在我用正确的路径更新了问题
    • 你的回答让我明白了一个道理:我使用的命名空间与声明类的命名空间不同。因此,将 namespace Sestante\Bundle\UserBundle\Entity; 更改为 namespace Sestante\UserBundle\Entity; 就可以了。谢谢,我会认为它是正确的答案;-)
    • 谢谢。在我发布答案后,我想知道这是否是问题所在。在这种情况下,很高兴知道错误消息是什么,这可能会在将来为我省去一些困惑。
    【解决方案2】:

    当我忘记声明我的命名空间(使用 Zend 1.12 和 Doctrine 2)时,我遇到了这个问题。在文件类型处添加命名空间声明解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 2015-02-01
      • 2016-05-16
      • 2012-01-06
      相关资源
      最近更新 更多