我总是记住这个问题,但我总是可以绕过问题而不直接面对它。直到今天。
我有以下需求:
我想覆盖一个包含实体的第三方包,所以我可以添加一些额外的注释(不仅仅是映射注释,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 。
答案 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以供参考。