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

时间:2016-04-15 09:44:08

标签: php symfony doctrine-orm annotations

我使用Symfony 3从现有项目开发Web应用程序超过8年。 因此我继承了现有的模型。

某些实体拥有此字段

/**
 * @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;

我有一个方法,在所有persist和flush之前调用doctrine方法自动更新某些字段。

    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实体)当doctrine想要一个整数时。这很正常。

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

  

http://php.net/manual/fr/function.gettype.php

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

感谢您的想法或潜力任何建议

1 个答案:

答案 0 :(得分:1)

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

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

// Catch the type
$fieldType = $fieldMetadata['type'];

然后在此类型上添加一些检查以注册好的值 希望您可以从您的方法访问学说服务。