Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
Php Symfony 3-动态表单-选择类型Ajax_Php_Ajax_Forms_Symfony_Events - Fatal编程技术网

Php Symfony 3-动态表单-选择类型Ajax

Php Symfony 3-动态表单-选择类型Ajax,php,ajax,forms,symfony,events,Php,Ajax,Forms,Symfony,Events,我目前正在处理一个用户创建表单 用户具有配置文件属性: /** * Many Users have One profile * @ORM\ManyToOne(targetEntity="ProjectBundle\Entity\User\Profile", inversedBy="users") * @ORM\JoinColumn(name="profile_id", referencedColumnName="id") */ privat

我目前正在处理一个用户创建表单

用户具有配置文件属性:

    /**
     * Many Users have One profile
     * @ORM\ManyToOne(targetEntity="ProjectBundle\Entity\User\Profile", inversedBy="users")
     * @ORM\JoinColumn(name="profile_id", referencedColumnName="id")
     */
    private $profile;
此配置文件是根据另一个选择(在更改操作jquery时)选择的:

默认情况下,我的数据库的所有配置文件都加载到select中,以避免出现错误“此值不正确”

但是我不希望用户看到所有的配置文件,所以我在事件中删除它,并返回空字段

但是我仍然得到错误“thisvalueiserror”,因为实际上,由于基本选择是空的,表单没有找到输入的值

我希望有一个默认为空的select,它是用Ajax填充的,并且不会显示错误“此值不正确”

我该怎么做?
谢谢

不仅在PRE_SET_数据上添加字段,而且在PRE_SUBMIT事件上添加字段。查看我的类似问题。

我找到了一个非常简单的解决方案,我不知道这是否是一个好主意,但它不需要很多行

我已经交付了默认表单

    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('lastname')
            ->add('firstname')
            ->add('gender',null,array('required'=>true))
            ->add('organisationMember',null,array(
                'required' => true,
                'choices' => $options['organisation'],
                'group_by' => 'type_organisation',
                'placeholder' => 'Choisissez votre organisation'
            ))
            ->add('job')
            ->add('mobile')
            ->add('phone')
            ->add('alert_failure')
            ->add('alert_full')
            ->add('alert_other')
            ->add('plainPassword', TextType::class, array('required' => true))
            ->add('email')
            ->add('profile', null, array(
                'required' => true,
                'placeholder' => 'Choose an organisation !',
            ));
    }
在我看来:

<div class="form-group{% if form.profile.vars.errors|length %} has-error{% endif %}">
        <label for="{{ form.profile.vars.id }}" class="col-sm-3 control-label no-padding-right required">Profile(s) </label>
        <div class="col-sm-9">
            {% do form.profile.setRendered %}
            <select name="user[profile]" id="user_profile" required class="form-control">
             //We can do a loop if needed
            </select>
            {{ form_errors(form.profile) }}
        </div>
</div>

个人资料
{%do form.profile.setRendered%}
//如果需要,我们可以做一个循环
{{form_errors(form.profile)}}
通过这种方式,我可以完全管理我是否需要select中的信息


它对我有效。

profile
您的实体中具有外键关系的成员,或者它没有连接到您的数据库?存在外键关系您是否尝试过在
'profile'
表单选项中设置
data=>null
?它不会更改任何设置
data=>null
,同时也会删除事件侦听器
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('lastname')
            ->add('firstname')
            ->add('gender',null,array('required'=>true))
            ->add('organisationMember',null,array(
                'required' => true,
                'choices' => $options['organisation'],
                'group_by' => 'type_organisation',
                'placeholder' => 'Choisissez votre organisation'
            ))
            ->add('job')
            ->add('mobile')
            ->add('phone')
            ->add('alert_failure')
            ->add('alert_full')
            ->add('alert_other')
            ->add('plainPassword', TextType::class, array('required' => true))
            ->add('email')
            ->add('profile', null, array(
                'required' => true,
                'placeholder' => 'Choose an organisation !',
            ));
    }
<div class="form-group{% if form.profile.vars.errors|length %} has-error{% endif %}">
        <label for="{{ form.profile.vars.id }}" class="col-sm-3 control-label no-padding-right required">Profile(s) </label>
        <div class="col-sm-9">
            {% do form.profile.setRendered %}
            <select name="user[profile]" id="user_profile" required class="form-control">
             //We can do a loop if needed
            </select>
            {{ form_errors(form.profile) }}
        </div>
</div>