2010-09-19 52 views
6

想象一個User模式是這樣的:簡單的方法來填充表單數據的doctrine 2模型?

class User { 
    /** 
    * ...some mapping info... 
    */ 
    private $username; 

    /** 
    * ...some mapping info... 
    */ 
    private $password; 

    public function setUsername($username) { 
    $this->username = $username; 
    } 

    public function setPassword($password) { 
    $this->password = $password; 
    } 
} 

樣本形式提交新User

<form action="/controller/saveUser" method="post"> 
    <p>Username: <input type="text" name="username" /></p> 
    <p>Password: <input type="text" name="password" /></p> 
</form> 
在我的控制器

目前我省新User這樣的:

public function saveUser() { 
    $user = new User(); 
    $user->setUsername($_POST['username']); 
    $user->setPassword($_POST['password']); 

    $entityManager->persist($user); 
} 

這意味着,爲通過表單接收的每個屬性調用setter方法。

我的問題:是有在學說的方法,其允許你表單數據/陣列結構自動映射到一個學說模型?理想情況下,可以從具有類似結構的數組中填充嵌套對象圖。

理想我可以改變我的控制器代碼繼續沿着這條東西(僞代碼/例):

public function saveUser() { 
    $user = Doctrine::populateModelFromArray('User', $_POST); // does this method exist? 
    $entityManager->persist($user); 
} 

預先感謝任何提示!


編輯:看來像這樣存在於教義1(http://www.doctrine-project.org/projects/orm/1.2/docs/manual/working-with-models%3Aarrays-and-objects%3Afrom-array/en) - 那麼,有沒有在教義2等效?

回答

0

如果你的名字你的字段一樣的實體屬性:

<?php 
foreach($_POST as $field => $val){ 
    $object->$field = $val; 
} 
?> 

但是,這僅適用於公共屬性。但是,您可以基於此計算方法名稱,並使用call_user_func()來調用它。

1

這對我的作品在教義2.0

$user = new User(); $user->fromArray($_POST);

只要你的POST陣列的關鍵比賽中的列名這應該填充模式爲您服務。

+1

咦,怎麼樣?這個方法來自Array的簽名是什麼? – JCM 2012-02-16 00:48:38

0

$ user = new User(); $用戶> fromArray($ _ POST);

我在Doctrine 1.2.4中測試它工作得很好。

相關問題