2011-11-17 60 views
4

比方說,我有一個User類:在Symfony2與Doctrine2上,Object = Entity?

$user = new User(1); 
$user->setName('Bob'); // save "bob" to database with ID 1 
$user->setGender('Male'); // save "male" to database with ID 1 

echo $user->getName(); // display bob 
echo $user->getGender(); // display "male"; 

echo $user->getDesignation() // display "Mr. Bob" 

現在,在Symfony2中,與Doctrine2,似乎Entity是用來與數據庫進行鏈接的對象。所以我認爲所有的setName(),setGender(),getName() & getGender()功能應該去一個文件,這是在一個Bundle的Entity目錄(因爲那些函數更新或從數據庫中選擇數據)。

但是getDesignation()呢?

public function getDesignation() { 
    if ($this->getGender() == 'Male') return "Mr. ".$this->getName(); 
    else return "Ms. ".$this->getName(); 
} 

可以在實體中放入一個與數據庫絕對沒有鏈接的函數嗎?這不是一個壞習慣嗎?

+0

不壞習慣超時尚的方法 - 但你回來「先生」每次... – ManseUK

回答

6

可以放一個與數據庫絕對沒有關係的函數嗎?

是的,沒關係。但仔細觀察,它仍然與數據庫有些「聯繫」,因爲它利用了最初來自持久層(數據庫)的性別和名稱數據。

這不是一個壞習慣嗎?

這並不是所有不好的做法,實際上它是非常有用的東西。它可以幫助您在模型對象中使用持久層,同時將代碼與數據庫訪問分離。

1

如果您的網頁總是以英文顯示,如果您需要將網站翻譯爲另一種語言,那麼您可以創建一個額外的類來處理Symfony翻譯器和實體以獲得多語言標題。另一種更簡單的方法是隻返回人物頭銜「先生」。像一個單獨的函數:

public function getDesignation() { 
    if ($this->getGender() == 'Male') return "Mr." else return "Ms."; 
} 

因爲你可以很容易地transale它在你的模板{{entity.designation |轉}}

無論如何,我只是想一點點貢獻,但簡短的回答是:是的,你可以使用實體來處理超出了基本的干將

問候