Symfony 2 Eingebettete Formulare mit einem zu vielen db-Beziehung

Ich habe ein problem einbettförmchen aus verschiedenen Entitäten in einer form, mein Formular angezeigt wird mit Vorname [input] Nachname [input] - Adresse - die Adresse aber keine Eingabe daneben.

Grundsätzlich möchte ich ein Formular erstellen, wo der Benutzer kann hinzufügen, Vorname, Nachname, adresse1, Adresse2, Stadt, Land ect und senden Sie es als ein, obwohl es unterschiedliche Tabellen.

Das Hauptformular ist kein problem, das einzige Problem das ich habe ist mit dem zweiten eingebetteten form. Jegliche Hilfe würde sehr geschätzt werden.

Hier ist mein code:

Mitglied Klasse:

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

Hier ist die Adresse-Klasse:

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

Hier ist die 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';
    }


}

Hier ist die Adresse Formular:

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

Hier ist der controller:

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(),));

    }
}

Hier ist die Vorlage:

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

Schon eine lange Zeit-Benutzer von dieser Seite, aber dies ist meine erste Frage stellen.

Danke

InformationsquelleAutor Llewellyn | 2011-09-21
Schreibe einen Kommentar