Форма коллекции в SF2 - PullRequest
       4

Форма коллекции в SF2

0 голосов
/ 13 июля 2011

Offers.php

/**
 * @var \ZGoffers\MainBundle\Entity\OfferParameter
 *
 * @ORM\OneToMany(targetEntity="OfferParameter", mappedBy="offer", cascade={"all"})
 */
private $parameters;

OfferParameter.php

/**
 * @var \ZGoffers\MainBundle\Entity\Offer
 *
 * @ORM\ManyToOne(targetEntity="Offer", inversedBy="offer", cascade={"all"})
 */
private $offer;

OfferType.php

class OfferType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('advertiser')
            ->add('name')
            ->add('url', 'text', array('label' => 'URL'))
            ->add('externalUrl', 'text', array('label' => 'External URL'))
            ->add('dailyCap', 'text', array('label' => 'Daily Cap'))
            ->add('parameters', 'collection', array(
                'type' => new OfferParameterType(),
                'allow_add' => true,
                'allow_delete' => true
            ))
            ->add('active', 'choice', array(
                'choices' => array(0 => 'Disabled', 1 => 'Enabled')
            ));
    }

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

OfferParameterType.php

class OfferParameterType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('field')
            ->add('type', 'choice', array(
                'choices' => array(
                    '='  => 'EQUALS',
                    '>'  => 'IS GREATER THAN',
                    '>=' => 'IS GREATER THAN OR EQUALS',
                    '<'  => 'IS LESS THAN',
                    '<=' => 'IS GREATER THAN OR EQUALS'
                )
            ))
            ->add('value');
    }

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

Обработка форм

public function process()
{
    if ('POST' == $this->request->getMethod()) {
        // bind form data
        $this->form->bindRequest($this->request);

        // If form is valid
        if ($this->form->isValid() && ($offer = $this->form->getData()) instanceof Offer) {

            foreach ($offer->getParameters() as $parameter) {
                $parameter->setOffer($offer); // THIS SHOULDNT BE NEEDED
            }

            // save offer to the database
            $this->entityManager->persist($offer);
            $this->entityManager->flush();

            return true;
        }
    }

    return false;
}

Мой вопрос ... Как, черт возьми, вы удаляете элементы в коллекциях форм в SF2 ????

У меня есть несколько форм, которые похожи на этиодин в моем проекте, и это действительно останавливает разработку: (

Спасибо за помощь!

1 Ответ

0 голосов
/ 03 июня 2012

Возможно, вам понадобится сделать что-то вроде следующего:

->add('parameters', 'collection', array(
                'type' => new OfferParameterType(),
                'allow_add' => true,
                'allow_delete' => true,
                'attr'=>array('style'=>'display:none;')
            ))

Это сделает вашу коллекцию OfferParameterType скрытой.

Или в OfferParameterType примените одну и ту же вещь к каждому полю, как показано ниже:

->add('field',null, array('attr'=>array('style'=>'display:none;')))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...