我正在使用Symfony 2构建一个应用程序,并且想知道如何最好地构建DRY表单。所以基本上我想要一个模板,例如然后我使用form.html.twig进行创建以及编辑下划线实体。这意味着,我更改了提交按钮上的文本,以便在创建“创建”和编辑“编辑”时说出来。我怎么能做到这样最好的东西?
目前我有这样的事情:
我的FormType:
class GroupType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('name', 'text')
->add('description', 'textarea')
->add('status', 'hidden', array(
'data' => 0
))
->add('createAndFinish', 'submit')
->add('createAndAddUsers', 'submit');
}
public function getName() {
return 'group';
}
}
我在相应模板中的表单:
{{ form_start(groupForm) }}
{% if not groupForm.vars.valid %}
<div class="alert alert-danger">
{{ form_errors(groupForm) }}
</div>
{% endif %}
<div class="form-group">
{{ form_label(groupForm.name) }}
{{ form_errors(groupForm.name) }}
{{ form_widget(groupForm.name, {'attr': {'class': 'form-control'}}) }}
</div>
<div class="form-group">
{{ form_label(groupForm.description) }}
{{ form_errors(groupForm.description) }}
{{ form_widget(groupForm.description, {'attr': {'class': 'form-control'}}) }}
</div>
{{ form_widget(groupForm.createAndFinish, {'attr': {'class': 'btn btn-primary'}}) }}
{{ form_widget(groupForm.createAndAddUsers, {'attr': {'class': 'btn btn-primary'}}) }}
{{ form_end(groupForm) }}
我基本上想要的是这样的:
{% if (formType == 'create') %}
{{ form_widget(groupForm.createAndFinish, {'attr': {'class': 'btn btn-primary'}}) }}
{{ form_widget(groupForm.createAndAddUsers, {'attr': {'class': 'btn btn-primary'}}) }}
{% elseif (formType == 'edit') %}
{{ form_widget(groupForm.createAndFinish, {'attr': {'class': 'btn btn-primary'}, 'value': 'Edit'}) }}
{% endif %}
但是,还有其他任何更柔和且模板代码更少的解决方案吗?谢谢你的想法!
答案 0 :(得分:2)
您可以使用if来检查项目是否已定义,然后显示它。
{% if groupForm.createAndFinish is defined %}
{{ form_widget(groupForm.createAndFinish, {'attr': {'class': 'classes'}}) }}
{% endif %}
答案 1 :(得分:0)
如何在GroupType中编写逻辑:
class GroupType extends AbstractType {
private $action;
public function __construct($action) {
$this->action = $action;
}
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('name', 'text')
->add('description', 'textarea')
->add('status', 'hidden', array(
'data' => 0
))
->add('createAndFinish', 'submit');
if ('create' == $this->action) {
$builder->add('createAndAddUsers', 'submit');
}
}
public function getName() {
return 'group';
}
}
然后只需从Controller中将$ action参数传递给GroupType构造函数。