代码之家  ›  专栏  ›  技术社区  ›  BMBM

用表单数据填充条令2模型的简单方法?

  •  6
  • BMBM  · 技术社区  · 14 年前

    想象一下 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;
      }
    }
    

    提交新的 用户 :

    <form action="/controller/saveUser" method="post"> 
      <p>Username: <input type="text" name="username" /></p>
      <p>Password: <input type="text" name="password" /></p>  
    </form> 
    

    当前在我的控制器中,我保存一个新的 用户 这样地:

    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 )-那么,在第二条原则中是否有类似的规定?

    3 回复  |  直到 14 年前
        1
  •  1
  •   k0nG    13 年前

    这在2.0理论中对我有效

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

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

        2
  •  0
  •   Harold1983-    14 年前

    如果字段名称与实体属性相同:

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

    但这只适用于公共财产。但是,可以基于此计算方法名,并使用call_user_func()调用它。

        3
  •  0
  •   Mimouni    11 年前

    $user=new user();$user->来自数组($_POST);

    我在理论1.2.4中测试了它,它工作得很好。