使用表单数据填充doctrine 2模型的简单方法?

时间:2010-09-19 13:18:03

标签: php doctrine

想象一下这样的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中是否存在等价物?

3 个答案:

答案 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中测试过它非常好。