Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/forms/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 使用表单事件时Symfony表单字段顺序_Forms_Events_Symfony_Fieldtype - Fatal编程技术网

Forms 使用表单事件时Symfony表单字段顺序

Forms 使用表单事件时Symfony表单字段顺序,forms,events,symfony,fieldtype,Forms,Events,Symfony,Fieldtype,我正在创建一个类似于所需的动态表单 我设法让它工作起来了。但我希望该类型的本机字段可以出现在动态下拉列表之后。这不是开箱即用,因为Dropbox是在PRE_SET_数据事件中添加到表单中的(在表单生成并添加名称字段之后),如您所见: public function buildForm(FormBuilder $builder, array $options) { $builder->add('country', 'entity', array( 'class'=&g

我正在创建一个类似于所需的动态表单

我设法让它工作起来了。但我希望该类型的本机字段可以出现在动态下拉列表之后。这不是开箱即用,因为Dropbox是在PRE_SET_数据事件中添加到表单中的(在表单生成并添加名称字段之后),如您所见:

public function buildForm(FormBuilder $builder, array $options)
{
    $builder->add('country', 'entity', array(
        'class'=>'TestBundle:Country', 
        'property'=>'name', 
        'property_path'=>false //Country is not directly related to City
    ));
    $builder->add('name');

    $factory = $builder->getFormFactory();

     (...)

     $builder->addEventListener(FormEvents::PRE_SET_DATA, function (DataEvent $event) use ($refreshStates, $setCountry)
    {
        $form = $event->getForm();
        $data = $event->getData();

        if($data == null)
            return;

        if($data instanceof City){
            $country = ($data->getId()) ? $data->getState()->getCountry() : null ;
            $refreshStates($form, $country);
            $setCountry($form, $country);
        }
    });
我尝试对name字段执行相同的操作,将其添加到buildForm函数的开头:

$addBaseFields = function ($form) use ($factory)
    {
        $form->add($factory->createNamed('text', 'name'));
    };
然后我在事件中添加了它:

 $builder->addEventListener(FormEvents::PRE_SET_DATA, function (DataEvent $event) use ($refreshStates, $setCountry)
    {
        $form = $event->getForm();
        $data = $event->getData();

        if($data == null)
            return;

        if($data instanceof City){
            $country = ($data->getId()) ? $data->getState()->getCountry() : null ;
            $refreshStates($form, $country);
            $setCountry($form, $country);
            $addBaseFields($form);
        }
    });
这类作品。但是,html5领域验证停止了工作。例如:如果我将名称定义为“number”类型而不是“text”:
$form->add($factory->createNamed('number','name')它将接受任何内容,任何文本


是否有更好的方法来执行此操作,以便我仍然可以使用数字浏览器验证?

这是版本2.0和2.1上的Symfony错误,与表单事件无关

在“数字”字段中输入字符串(如“9fgda”)时,不存在验证错误,字符串值“9fgda”在数值“9”中转换,不会给出错误

这是因为NumberFormatter的原因,对于版本2.2应该是固定的

有关此错误的详细信息