2010-09-19 5 views
6

imaginar un modelo de User así:manera fácil de completar un modelo de doctrine 2 con datos de formulario?

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; 
    } 
} 

un formulario de muestra que presente una nueva User:

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

Actualmente en mi controlador de E guardar un nuevo User así:

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

    $entityManager->persist($user); 
} 

Eso significa que se llama al método setter para cada una de las propiedades que recibo a través del formulario.

Mi pregunta: ¿Hay algún método en Doctrine que le permita mapear automáticamente datos de formulario/una estructura de matriz a un modelo de Doctrine? Idealmente, es posible rellenar gráficos de objetos anidados a partir de una matriz con una estructura similar.

Lo ideal sería que pudiera cambiar de código del controlador a algo en este sentido (pseudo código/ejemplo):

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

Gracias de antemano por cualquier pista!


EDIT: Parece algo como esto existe en Doctrina 1 (http://www.doctrine-project.org/projects/orm/1.2/docs/manual/working-with-models%3Aarrays-and-objects%3Afrom-array/en) - así, ¿existe un equivalente en Doctrina 2?

Respuesta

0

Si el nombre de sus campos lo mismo que las propiedades de la entidad:

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

Pero eso sólo funciona para las propiedades públicas. Sin embargo, puede calcular el nombre del método en función de esto y usar call_user_func() para llamarlo.

1

Esto funciona para mí en Doctrina 2,0

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

Mientras los años clave de la matriz de la POST coinciden con los nombres de las columnas esto debe poblar el modelo para usted.

+1

Huh, ¿cómo? ¿Cuál es la firma de este método de Array? – JCM

0

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

Lo probé en Doctrine 1.2.4 funciona muy bien.

Cuestiones relacionadas