如何建立DRY树枝形式?

时间:2013-11-30 13:17:14

标签: php forms symfony twig symfony-2.3

我正在使用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 %}

但是,还有其他任何更柔和且模板代码更少的解决方案吗?谢谢你的想法!

2 个答案:

答案 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构造函数。