php - createform - symfony using form
¿forma fácil de completar un modelo de doctrine 2 con datos de formulario? (3)
Imagine un modelo de User
como este:
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 para enviar un nuevo 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 guardo un nuevo User
como este:
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 te 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.
Idealmente, podría cambiar mi código de controlador a algo similar (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!
EDITAR: Parece algo como esto existe en Doctrine 1 ( http://www.doctrine-project.org/projects/orm/1.2/docs/manual/working-with-models%3Aarrays-and-objects%3Afrom-array/ en ) - entonces, ¿hay un equivalente en Doctrine 2?
Si nombra sus campos igual que las propiedades de la entidad:
<?php
foreach($_POST as $field => $val){
$object->$field = $val;
}
?>
Pero eso solo funciona para propiedades públicas. Sin embargo, puede calcular el nombre del método en función de esto y usar call_user_func () para llamarlo.
Esto funciona para mí en Doctrine 2.0
$user = new User(); $user->fromArray($_POST);
Siempre que las claves de su matriz POST coincidan con los nombres de las columnas, esto debería rellenar el modelo por usted.
$ user = new User (); $ user-> fromArray ($ _ POST);
Lo probé en Doctrine 1.2.4, funciona muy bien.