繁体   English   中英

Symfony2:订单表单字段

[英]Symfony2: Order form fields

考虑这段代码:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('name', 'text')
        ->add('description', 'textarea')
        ->add('status', 'choice', array('choices' => array('online' => 'online', 'offline' => 'offline')))
        ->add('save', 'submit');
}

但是当我呈现此表单时,我会按顺序获得它

description
name
status

除了手动编写表单模板之外,我该如何更改。

今天在表单元素排序方面存在相同的问题。

最后具有将覆盖finishView方法并在FormView的children属性中对项进行重新排序的特征:

trait OrderedTrait
{
    abstract function getFieldsOrder();

    public function finishView(FormView $view, FormInterface $form, array $options)
    {
        /** @var FormView[] $fields */
        $fields = [];
        foreach ($this->getFieldsOrder() as $field) {
            if ($view->offsetExists($field)) {
                $fields[$field] = $view->offsetGet($field);
                $view->offsetUnset($field);
            }
        }

        $view->children = $fields + $view->children;

        parent::finishView($view, $form, $options);
    }
}

然后在类型中实现getFieldsOrder方法:

use OrderedTrait;

function getFieldsOrder()
{
    return [
        'first',
        'second',
        'next',
        'etc.',
    ];
}

您可以使用https://github.com/egeloen/ivory-ordered-form/包。 也许有一天它将集成到核心中。 目前,symfony表单组件没有任何订购选项。

您希望从您的PHP控制渲染顺序,但是实际上,您的PHP不应了解也不关心信息的渲染方式。 渲染顺序在模板中进行处理,最好通过树枝进行处理,因为处理模板是模板的责任。 这是一个简单的过程,可为您提供足够的控制权。 以下Twig模板应该可以解决您的订单:

{{form_start(nameOfFormVariablePassedFromController}}
    {{form_label(nameOfFormVariablePassedFromController.name)}}
    {{form_widget(nameOfFormVariablePassedFromController.name)}}

    {{form_label(nameOfFormVariablePassedFromController.description)}}
    {{form_widget(nameOfFormVariablePassedFromController.description)}}

    {{form_label(nameOfFormVariablePassedFromController.status)}}
    {{form_widget(nameOfFormVariablePassedFromController.status)}}

    {{form_widget(nameOfFormVariablePassedFromController.save)}}
{{form_end(nameOfFormVariablePassedFromController}}

通过添加额外的参数,很容易将类添加到这些标签和小部件中以进行样式设置。 如果您需要进一步说明,我可以为您提供帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM