2016-04-15 37 views
1

我正在开发一个带有Symfony 3的Web应用程序,它已经存在了8年以上的现有项目。 因此我继承了现有的模型。PHP通过注释从属性中查找变量类型

一些实体这一领域

/** 
* @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整数,因为我不能指定一个实体($这个 - > current_user-> getFouridSiteutilisateur()返回一个FourListe实体)当学说要一个整数。这是正常的。

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

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

所以,有一种方法,也许,通过注释,要知道如果$ fourisSite将是一个实体或整数?

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

回答

1

视您更新钩的位置,你可以用它来了解你列的类型:

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

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

然后在此类型添加一些检查注册好价值。
希望你可以从你的方法访问原则服务。

+0

完美,谢谢 –