2010-11-28 34 views
3

我正在使用本教程作爲基於代碼點火器/基於Doctrine的項目的基礎。如何使用Doctrine YAML Schema設置自定義的mutator?

http://www.phpandstuff.com/articles/codeigniter-doctrine-scratch-day-3-user-signup-form

而不是使用代碼,是爲模特,我的項目是使用YAML架構文件來生成

我碰釘子的車型,在我已經有了不知道如何表示以下使用YAML:

$this->hasMutator('password', '_encrypt_password'); 

(這是從用戶模型代碼,在「添加改變者」) 具體來說,我遇到的這 - $> hasMutator線

麻煩

我GOOGLE了,直到藍色,搜索文檔學說,symfony的(我知道使用大量學說),甚至grep'd爲以存取器的引用代碼庫 - 我想出空

是否有辦法代表行$ this-> hasMutator('password','_encrypt_password');使用Doctrine YAML?

回答

1

(請注意澄清:我們在這裏討論Doctrine 1.x而不是Doctrine 2.x) 不,沒有辦法直接在您的YAML模式中定義mutators。你確定你必須在那裏註冊mutator嗎?

你可以通過創建你自己的教義行爲來解決這個限制。可以在YAML模式中將原則行爲分配給您的模型。在這裏閱讀更多:

http://www.doctrine-project.org/projects/orm/1.2/docs/manual/behaviors/pl

在你的情況的行爲會是這個樣子:

class EbonhandsTemplate extends Doctrine_Template 
{ 
    public function setUp() 
    { 
     $this->hasMutator('password', '_encrypt_password'); 
    } 

    public function _encrypt_password 
    .... 
} 

而在你的YAML架構:

EbonhandsModel: 
    actAs: [EbonhandsTemplate] 
+0

感謝奧洛夫 - 它不是相當的解決方案,我是looki ng,但它和我要得到的一樣接近! – ebonhand 2010-12-04 07:00:55

0

我結束了由解決這個在生成的User.php模型中添加一個新方法,如下所示:

public function setPassword($pass) 
{ 
    $this->_set('password', $this->_encrypt_password($pass)); 
} 

它達到了與上面鏈接的教程相同的最終結果(例如,允許通過YAML修改用戶模型模式而不會丟失代碼),但不會感覺優雅或通用。

我標誌着奧洛夫的答案是正確的/接受,因爲他的解決方案感覺更可擴展性和麪向對象 - 我的「味道」有點

0

還有就是要注意關於存取器,如果你從YAML文件裝載數據的一個重要的事情。

正如tutorial你所提到的,如果你的用戶類是這樣的:

class User extends ModelBaseUser 
{ 
    public function setUp() { 
     parent::setUp(); 
     $this->hasMutator('password', '_encryptPassword'); 
    } 

    protected function _encryptPassword($value) { 
     $salt = $this->_get('salt'); 
     $this->_set('password', md5($salt . $value)); 
    } 
} 

和您使用loadData()來填補YAML文件數據庫確保您加載鹽場第一,如下圖所示:

ModelUser: 
    User_Admin: 
     username: admin 
     salt: $secret_ 
     password: adminPa$$ 
     email: [email protected] 

代替:

ModelUser: 
    User_Admin: 
     username: admin 
     password: adminPa$$ 
     salt: $secret_ 
     email: [email protected] 
相關問題