覆盖第三方Symfony Bundle的Doctrine实体

时间:2016-09-22 08:01:22

标签: php symfony doctrine-orm

我总是记住这个问题,但我总是可以绕过问题而不直接面对它。直到今天。

我有以下需求:

我想覆盖一个包含实体的第三方包,所以我可以添加一些额外的注释(不仅仅是映射注释,JMS注释,BeSimple注释等)。实体不是 Mapped Superclass ,我似乎也无法使用 Interfaces 来解决问题。

有人可以解决这个问题吗?

我将用代码解释:

第三方捆绑实体类我想延伸一些:

namespace Third\PartyBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * User
 *
 * @ORM\Table(name="User")
 * @ORM\Entity(repositoryClass="Third\PartyBundle\Repository\UserRepository")
 */
class User
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=20
     *
     * @Assert\NotBlank()
     */
    private $name;
}

我想要实现的目标:

namespace My\OwnBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap;

/**
 * User
 *
 * @ORM\Table(name="User")
 * @ORM\Entity(repositoryClass="My\OwnBundle\Repository\UserRepository")
 */
class User
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @Soap\ComplexType("int", nillable=false)
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=20
     * @Soap\ComplexType("string", nillable=false)
     * @Assert\NotBlank()
     */
    private $name;
}

请注意,第二个类在Besimple中有额外的 Annotations

2 个答案:

答案 0 :(得分:1)

您可以使用symfony的Bundle继承,例如:

    class BorhUserBundle extends Bundle
    {
       public function getParent()
       {
          return 'FOSUserBundle';
       }
    }

以下是文档: symfony doc

所以你只需要在同一目录中创建具有相同名称的实体,并继承实体......这就是我们扩展FosUserBundle的方式

答案 1 :(得分:0)

在大多数发布实体的捆绑包中,可以设置要在配置中使用的自定义实体类。你有没有检查过这种可能性?

关于此类库/模块is the ZfcUser module from ZF-Commons的示例。在该模块中,全局配置文件中有一个全局密钥'user_entity_class',默认为ZfcUser\Entity\User,但可用于指向要使用的备用实体类。

检查the config file here以供参考。