【问题标题】:easy way to populate a doctrine 2 model with form data?用表单数据填充学说 2 模型的简单方法?
【发布时间】:2010-09-19 13:18:03
【问题描述】:

想象一个像这样的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) 中似乎存在类似的东西 - 那么,学说 2 中是否存在等价物?

【问题讨论】:

    标签: php doctrine


    【解决方案1】:

    这在 Doctrine 2.0 中适用于我

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

    只要您的 POST 数组的键与列名匹配,这应该会为您填充模型。

    【讨论】:

    • 嗯,怎么样?这个方法 fromArray 的签名是什么?
    【解决方案2】:

    如果您将字段命名为与实体属性相同:

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

    但这仅适用于公共财产。但是,您可以根据此计算方法名称,并使用 call_user_func() 来调用它。

    【讨论】:

      【解决方案3】:

      $user = 新用户(); $user->fromArray($_POST);

      我在 Doctrine 1.2.4 中对其进行了测试,它工作得很好。

      【讨论】:

        猜你喜欢
        • 2010-10-27
        • 2019-01-29
        • 2014-06-11
        • 2011-01-11
        • 2012-08-12
        • 2015-02-21
        • 2018-09-28
        • 2015-05-28
        • 1970-01-01
        相关资源
        最近更新 更多