想象一下这样的User
模型:
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方法。
我的问题: Doctrine中是否有一个方法允许您自动将表单数据/数组结构映射到Doctrine模型?理想情况下,可以从数组填充嵌套对象图类似的结构。
理想情况下,我可以将控制器代码更改为这些行(伪代码/示例):
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)中似乎存在这样的事情 - 所以,在Doctrine 2中是否存在等价物?
答案 0 :(得分:1)
这在Doctrine 2.0中适用于我
$user = new User();
$user->fromArray($_POST);
只要POST数组的键与列名匹配,就应该为您填充模型。
答案 1 :(得分:0)
如果您将字段命名为与实体属性相同:
<?php
foreach($_POST as $field => $val){
$object->$field = $val;
}
?>
但这只适用于公共场所。但是,您可以根据此计算方法名称,并使用call_user_func()来调用它。
答案 2 :(得分:0)
$ user = new User(); $用户&GT; fromArray($ _ POST);
我在Doctrine 1.2.4中测试过它非常好。