2013-07-19 18 views
3

我正在爲使用Symfony2和FosRestBundle的系統開發一個REST API。 FosRestBundle是一個非常好的工具,但它似乎有一個限制:只有屬性(priviate,protected和public)才能暴露給API。如何用FosRestBundle公開函數結果?

我想公開一個基於兩個其他字段計算的派生屬性(例如全名= firstName + lastName)以及也描述關係的屬性(例如產品的類別名稱而不是類別ID一個產品)

但@Expose註釋只能在屬性上工作。

我試着創建一個虛擬屬性,在構造函數中設置該屬性(工作時創建一個新的)和在Doctrine生命週期postLoad事件處理程序(工作時從數據庫中加載),它正在工作。但是我不喜歡這種方法,因爲即使實體類沒有被API使用,它也會產生開銷和額外的編碼。

我想知道是否有更好的方法來實現這一點。

回答

1

四處尋找的答案後,我找到了一個解決方案,與@expose註釋以來,JMS串行器自帶的另一個註解只是這一目的:@Accessor

/** 
* @REST\Accessor(getter="getName") 
* @REST\Expose 
*/ 
private $name; 


/** 
* Return a name of the license 
* 
* @return string 
*/ 
public function getName() 
{ 

    return $this->getProduct()->getName(); 
} 

是,虛擬財產仍然是必需的,但你可以把它變成私人的,比我以前嘗試的方法要好得多。我希望這可以節省一些時間。

+0

你好。這對序列化很有用,但是...反序列化會發生什麼?我需要公開一個虛擬財產的讀/寫津貼。 WBR – manuelbcd