PHP通过注释从属性中查找变量类型


PHP find variable type from property through annotation

我正在用Symfony 3从一个已有8年多的项目中开发一个web应用程序。因此,我继承了一个现有的模型。

一些实体具有此字段

/**
 * @var integer
 *
 * @ORM'Column(name="FourID_Site", type="bigint", nullable=true)
 */
private $fouridSite;

还有一些有

/**
 * @var 'FourListe
 *
 * @ORM'ManyToOne(targetEntity="FourListe")
 * @ORM'JoinColumns({
 *   @ORM'JoinColumn(name="FourID_Site", referencedColumnName="FourID")
 * })
 */
private $fouridSite;

我有一个方法,在所有的持久化和刷新原则方法之前被调用,用于自动更新一些字段。

    if (property_exists(get_class($entity), 'fouridSite')) {
        $entity->setFouridSite($this->current_user->getFouridSiteutilisateur());
    }
    if (property_exists(get_class($entity), 'majlogin')) {
        $entity->setMajlogin($this->current_user->getLogin());
    }
    if (property_exists(get_class($entity), 'majdate')) {
        $entity->setMajdate(new 'DateTime());
    }

问题:$fouridSite整数时,此代码引发错误,因为当条令需要整数时,我无法分配实体$this->current_user->getFouridSiteutilisateur()返回FourListe实体)。这很正常。

本机php方法get-type()在这种情况下不能使用,因为它返回NULL。

https://php.net/gettype

所以,有一种方法可以通过注释来知道$fourisSite是实体还是整数?

谢谢你的想法或潜力,有什么建议吗?

根据更新挂钩的位置,您可以使用它来了解列的类型:

$em = $this->get('doctrine')->getManager();
$metadata = $em->getClassMetadata(get_class($entity));
$fieldMetadata = $metadata->fieldMappings['fouridSite'];
// Catch the type
$fieldType = $fieldMetadata['type'];

然后在该类型上添加一些检查,以注册正确的值
希望您可以通过您的方法访问条令服务。