2016-04-15 68 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

完美,謝謝 –