dongpu8935 2014-12-22 21:53
浏览 45

symfony2:当表单是服务时,presetdata事件不起作用

With symfony I am trying to listen to the preset data event on a form declared as a service.

I have a parent form in which I call ->add('unit', 'fmu_unit')

EDIT : I add here a full simple example. It's not working as expected.

My controller:

<?php

namespace AppBundle\Controller;

use AppBundle\Entity\MarketPlace\Product;
use AppBundle\Form\UnitTestType;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

class DefaultController extends Controller
{
    /**
     * @Route("/", name="home")
     * @Method({"POST", "GET"})
     * @Template(":Default:index.html.twig")
     */
    public function indexAction()
    {
        $formManager = $this->get('form_manager');

        $product = new Product();
        $unit = $this->getDoctrine()->getRepository('AppBundle:FoodAnalytics\Unit')->findOneByName('g');
        $product->setUnit($unit);

        $form = $formManager->createForm(new UnitTestType(), $product ,'POST', 'home');

        return array('form' => $form->createView());
    }
}

My first Type (UnitTest):

<?php

namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class UnitTestType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('unit', 'fmu_unit')
        ;
    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
                'data_class' => 'AppBundle\Entity\MarketPlace\Product'
            ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'unit_test';
    }

}

My second type (the service one in which I try to use Form Events):

<?php

namespace AppBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class UnitType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->addEventListener(FormEvents::PRE_SET_DATA, function(FormEvent $event) {
                $product = $event->getData();
                $form = $event->getForm();

                //This is not working
                $form->add('unit','entity', array(
                        'class' => 'AppBundle:FoodAnalytics\Unit'
                    ));
            });

        //This is working
//        $builder->add('unit','entity', array(
//                'class' => 'AppBundle:FoodAnalytics\Unit'
//            ));
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
                'inherit_data' => true,
            ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'fmu_unit';
    }

}

The declaration as a service:

services:
    unit.type:
        class: %unit.type.class%
        tags:
            - { name: form.type, alias: fmu_unit }

The view : {{ form(form) }} Nothing shows up but the label when I use the form Events. It works fine if I don't use it.

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
    • ¥20 怎么用dlib库的算法识别小麦病虫害
    • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
    • ¥15 java写代码遇到问题,求帮助
    • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
    • ¥15 有了解d3和topogram.js库的吗?有偿请教
    • ¥100 任意维数的K均值聚类
    • ¥15 stamps做sbas-insar,时序沉降图怎么画
    • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
    • ¥15 关于#Java#的问题,如何解决?