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>