这是我的表格
class CandidateType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('firstName')
->add('lastName')
->add('dob')
->add('user', new CandidateUserType());
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Candidate',
'cascade_validation' => true,
));
}
public function getName()
{
return 'candidate';
}
}
在我的第一个屏幕系统中,只获取first_name的姓氏和用户详细信息。我需要在第二个屏幕中使用此表单。但我不需要在该视图中显示名字和姓氏字段。我真的只需要表演出生日。
所以我这样展示我的表格。
{{ form_start(form, {'attr': {'id': 'candidate_form', 'class': 'form-horizontal'}}) }}
{{ form_errors(form) }}
<div class="row">
<div class="form-group">
<label>DOB</label>
{{ form_widget(form.dob, {'attr': {'class': 'form-control'}}) }}
{{ form_errors(form.dob) }}
</div>
<div class="col-sm-12 col-xs-12">
<button type="submit" class="btn btn-primary btn-lg pull-right">
COMPLETE
</button>
</div>
</div>
{{ form_row(form._token) }}
{{ form_end(form, {'render_rest': false}) }}
我使用render_rest
来显示不需要的字段。但系统也检查firstName,lastName和user字段的验证。
我使用过验证组。但它会覆盖当前值并将这些字段保存为空白。
这个问题可能重复。这样做的正确方法是什么?我应该为候选人的show dob实施另一种形式吗?
答案 0 :(得分:1)
您可以添加要传递给formtype的参数,并且:
private $show_fl;
public function __construct($show_fl = true){
$this->show_fl = $show_fl;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
if($show_fl) {
$builder
->add('firstName')
->add('lastName');
}
$builder->add('dob')
->add('user', new CandidateUserType());
}
或使用其他表格类型。
您也可以在不使用构造的情况下使用buildForm的$ options。