Symfony 2 formulaires Intégrés à l'aide de l'un de plusieurs db relation

Je vais avoir un problème de l'incorporation de formes différentes entités dans un formulaire, mon formulaire est affiché avec prenom [entrée] nom [entrée] adresse - mais l'adresse n'a pas d'entrée à côté d'elle.

Fondamentalement, je veux créer un formulaire où l'utilisateur peut ajouter un prénom, un nom, adresse1, adresse2, ville, pays ect et le présenter comme un, même si c'est différent tables.

Le formulaire principal n'est pas de problème le seul problème que je vais avoir est avec le deuxième formulaire intégré. Toute aide serait grandement appréciée.

Voici mon code:

Membre de la classe:

namespace Pomc\MembersBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Pomc\MembersBundle\Entity\Member
*/
class Member
{
/**
* @var integer $id
*/
private $id;
/**
* @var string $firstName
*/
private $firstName;
/**
* @var string $lastName
*/
private $lastName;
/**
* @var Pomc\MembersBundle\Entity\Address
*/
private $address;
/**
* @var Pomc\MembersBundle\Entity\Telephone
*/
private $telephone;
public function __construct()
{
$this->address = new \Doctrine\Common\Collections\ArrayCollection();
$this->telephone = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Get id
*
* @return integer 
*/
public function getId()
{
return $this->id;
}
/**
* Set firstName
*
* @param string $firstName
*/
public function setFirstName($firstName)
{
$this->firstName = $firstName;
}
/**
* Get firstName
*
* @return string 
*/
public function getFirstName()
{
return $this->firstName;
}
/**
* Set lastName
*
* @param string $lastName
*/
public function setLastName($lastName)
{
$this->lastName = $lastName;
}
/**
* Get lastName
*
* @return string 
*/
public function getLastName()
{
return $this->lastName;
}
/**
* Add address
*
* @param Pomc\MembersBundle\Entity\Address $address
*/
public function addAddress(\Pomc\MembersBundle\Entity\Address $address)
{
$this->address[] = $address;
}
/**
* Get address
*
* @return Doctrine\Common\Collections\Collection 
*/
public function getAddress()
{
return $this->address;
}
/**
* Add telephone
*
* @param Pomc\MembersBundle\Entity\Telephone $telephone
*/
public function addTelephone(\Pomc\MembersBundle\Entity\Telephone $telephone)
{
$this->telephone[] = $telephone;
}
/**
* Get telephone
*
* @return Doctrine\Common\Collections\Collection 
*/
public function getTelephone()
{
return $this->telephone;
}
}

Ici est la classe d'adresse:

namespace Pomc\MembersBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Pomc\MembersBundle\Entity\Address
*/
class Address
{
/**
* @var integer $id
*/
private $id;
/**
* @var string $addressType
*/
private $addressType;
/**
* @var string $firstLine
*/
private $firstLine;
/**
* @var string $secondLine
*/
private $secondLine;
/**
* @var string $city
*/
private $city;
/**
* @var string $postCode
*/
private $postCode;
/**
* @var string $country
*/
private $country;
/**
* @var Pomc\MembersBundle\Entity\Member
*/
private $member;
/**
* Get id
*
* @return integer 
*/
public function getId()
{
return $this->id;
}
/**
* Set addressType
*
* @param string $addressType
*/
public function setAddressType($addressType)
{
$this->addressType = $addressType;
}
/**
* Get addressType
*
* @return string 
*/
public function getAddressType()
{
return $this->addressType;
}
/**
* Set firstLine
*
* @param string $firstLine
*/
public function setFirstLine($firstLine)
{
$this->firstLine = $firstLine;
}
/**
* Get firstLine
*
* @return string 
*/
public function getFirstLine()
{
return $this->firstLine;
}
/**
* Set secondLine
*
* @param string $secondLine
*/
public function setSecondLine($secondLine)
{
$this->secondLine = $secondLine;
}
/**
* Get secondLine
*
* @return string 
*/
public function getSecondLine()
{
return $this->secondLine;
}
/**
* Set city
*
* @param string $city
*/
public function setCity($city)
{
$this->city = $city;
}
/**
* Get city
*
* @return string 
*/
public function getCity()
{
return $this->city;
}
/**
* Set postCode
*
* @param string $postCode
*/
public function setPostCode($postCode)
{
$this->postCode = $postCode;
}
/**
* Get postCode
*
* @return string 
*/
public function getPostCode()
{
return $this->postCode;
}
/**
* Set country
*
* @param string $country
*/
public function setCountry($country)
{
$this->country = $country;
}
/**
* Get country
*
* @return string 
*/
public function getCountry()
{
return $this->country;
}
/**
* Set member
*
* @param Pomc\MembersBundle\Entity\Member $member
*/
public function setMember(\Pomc\MembersBundle\Entity\Member $member)
{
$this->member = $member;
}
/**
* Get member
*
* @return Pomc\MembersBundle\Entity\Member 
*/
public function getMember()
{
return $this->member;
}
}

Ici est la memberform:

namespace Pomc\MembersBundle\Form\Type;
use \Symfony\Component\Form\AbstractType;
use \Symfony\Component\Form\FormBuilder;
class MemberType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('firstName');
$builder->add('lastName');
$builder->add('address','collection', array( 'type' =>  new AddressType(),
'allow_add' => true,
'prototype' => true,
'by_reference' => false,
));
}
public function getDefaultOptions(array $options)
{
return array('data_class' => 'Pomc\MembersBundle\Entity\Member');
}
/**
* Returns the name of this type.
*
* @return string The name of this type
*/
function getName()
{
return 'member';
}
}

Voici le formulaire d'adresse:

namespace Pomc\MembersBundle\Form\Type;
use \Symfony\Component\Form\AbstractType;
use \Symfony\Component\Form\FormBuilder;
class AddressType extends AbstractType
{
public function buildForm(Formbuilder $builder, array $options)
{
$builder->add('firstLine');
}
public function getDefaultOptions(array $options)
{
return array('data_class' => 'Pomc\MembersBundle\Entity\Address');
}
/**
* Returns the name of this type.
*
* @return string The name of this type
*/
function getName()
{
return 'address';
}
function getIdentifier()
{
return 'address';
}
}

Ici est le contrôleur:

namespace Pomc\MembersBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use \Pomc\MembersBundle\Entity\Member;
use \Symfony\Component\HttpFoundation\Request;
use \Pomc\MembersBundle\Form\Type\MemberType;
class DefaultController extends Controller
{
public function indexAction($name)
{
return $this->render('PomcMembersBundle:Default:index.html.twig', array('name' => $name));
}
public function newAction(Request $request)
{
$member = new Member();
$form = $this->get('form.factory')->create(new MemberType());
if($request->getMethod() == 'POST')
{
$form->bindRequest($request);
if($form->isValid())
{
$em = $this->getDoctrine()->getEntityManager();
$em->persist($member);
$em->flush();
}
}
return $this->render('PomcMembersBundle:Default:new.html.twig', array( 'form'=> $form->createView(),));
}
}

Voici le modèle:

<form action="{{ path('member_new') }}" method="post" {{ form_enctype(form)}}>
{{ form_widget(form) }}
<div>
{{ form_row(form.address)}}
</div>
<input type="submit" />
</form>

Été un long moment, l'utilisateur de ce site, mais c'est ma première question.

Merci

Comment imbriquer une collection de formulaires peuvent être utiles. symfony.com/doc/2.3/cookbook/form/form_collections.html

OriginalL'auteur Llewellyn | 2011-09-21