Symfony2 (beta5) 1: M / M: 1 i form

stemmer
1

Jeg har enhet kreative og Entity spørsmål ... Når jeg hadde en ManyToMany forhold fra Creative til spørsmålet, kan jeg enkelt gjøre $ Builder> Legg til ( 'spørsmål'), og det ville ta alle spørsmålene og sette dem i en Multi og sette inn creative_question. Vel jeg må ha et nytt felt (posisjon) til creative_question, så jeg måtte lage en OneToMany / ManyToOne forhold. Men når jeg legger feltet ($ Builder> legg ( 'creativeQuestions')), multi-select er blank og det synes å være å prøve å spørre creative_question å fylle den .. noe som er galt. Jeg trenger å fylle med spørsmål og sette disse inn creative_question.

Uansett, her er min kode:

## Creative.php

[...]

/**
 * @ORM\Column(type=integer)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy=IDENTITY)
 */
protected $id;

/**
 * @ORM\ManyToOne(targetEntity=Offer, cascade={persist})
 */
protected $offer;

/**
 * @ORM\OneToMany(targetEntity=CreativeQuestion, mappedBy=creative, cascade={persist})
 */
protected $creativeQuestions;

[...]

## CreativeQuestion.php

[...]

/**
 * @ORM\Column(type=integer)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy=IDENTITY)
 */
protected $id;

/**
 * @ORM\ManyToOne(targetEntity=Creative, cascade={persist})
 */
protected $creative;

/**
 * @ORM\ManyToOne(targetEntity=Question, cascade={persist})
 */
protected $question;

/**
 * @ORM\Column(type=integer)
 */
protected $pos;

[...]

## CreativeType.php

[...]

public function buildForm(FormBuilder $builder, array $options)
{
    $builder
        ->add('name')
        ->add('title')
        ->add('description')
        ->add('body')
        ->add('script')
        ->add('creativeQuestions') // how do i populate list with Questions then insert into creative_question?
        ->add('active');
}

public function getDefaultOptions(array $options)
{
    return array(
        'data_class' => 'JStout\MainBundle\Entity\Creative'
    );
}

[...]

## In My Controller:

 /**
 * @Extra\Route(/offer/{offerId}/creative, name=admin_offer_creative)
 * @Extra\Route(/offer/{offerId}/creative/{creativeId}, name=admin_offer_creative_edit)
 * @Extra\Template()
 */
public function creativeAction($offerId = null, $creativeId = null)
{
    // Get Offer
    $offer = $this->_getObject('Offer', $offerId);

    if (null === $offer->getId()) throw new NotFoundHttpException('The page you requested does not exist!');

    // Get Creative
    $creative = $this->_getObject('Creative', $creativeId);

    // Set offer to creative
    $creative->setOffer($offer);

    // Get form and handler
    $form = $this->get('form.factory')->create(new Form\CreativeType(), $creative);
    $formHandler = $this->get('form.handler')->create(new Form\CreativeHandler(), $form);

    [...]
}

protected function _getObject($entityName, $id = null)
{
    // Find object
    if (null !== $id) {
        if (!$object = $this->get('doctrine')->getEntityManager()->find('ZGOffersMainBundle:' . $entityName, $id)) {
            throw new NotFoundHttpException('The page you requested does not exist!');
        }

        return $object;
    }

    // Initialize new object
    $entityName = 'JStout\MainBundle\Entity\\' . $entityName;
    if (class_exists($entityName)) {
        return new $entityName();
    }

    throw new NotFoundHttpException('The page you requested does not exist!');
}

[...]

Igjen, det jeg trenger verker når jeg fjerner CreativeQuestion og bare gjøre Spørsmål med en ManyToMany forhold:

arbeider

Men ideelt sett ville jeg gjerne ha muligheten til å (med jQuery) legge spørsmålene ved å velge fra en rullegardinboksen, og dra / slipp for posisjonering av spørsmålene. JQuery posisjonering er lett, jeg vet bare ikke hvordan du skal gå om å legge de spørsmålene hvor jeg vil. Hvis jeg kan i det minste få Multi å jobbe, så jeg kan gå videre, men jeg er litt stuck akkurat nå!

Noen få dette langt, men med Symfony2 (beta5)?

Publisert på 23/06/2011 klokken 00:08
kilden bruker
På andre språk...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more