sni*_*gel 7 symfony-forms symfony symfony-2.1
在我们的Symfony2项目中,我们有一个非常复杂的结构,用于嵌入表单的表单....现在我们需要以特定的顺序带来表单的输出.
这就是问题所在:我们使用form_widget(form),现在我们正在寻找对象中的解决方案(例如通过注释)或formbuilder将特定字段移动到表单的末尾.在symfony 1.4中,它是widget-movefield()函数,我猜...
谢谢...
Raf*_*hms 10
您可以使用此捆绑包重新排序字段:https://github.com/egeloen/IvoryOrderedFormBundle
这允许你做这样的事情:
$builder
->add('g', 'text', array('position' => 'last'))
->add('a', 'text', array('position' => 'first'))
->add('c', 'text')
->add('f', 'text')
->add('e', 'text', array('position' => array('before' => 'f')))
->add('d', 'text', array('position' => array('after' => 'c')))
->add('b', 'text', array('position' => 'first'));
Run Code Online (Sandbox Code Playgroud)
这将是核心,但被拒绝并被捆绑出来.
今天和表单元素排序有同样的问题.
结束了将覆盖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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在类型实现getFieldsOrder方法:
use OrderedTrait;
function getFieldsOrder()
{
return [
'first',
'second',
'next',
'etc.',
];
}
Run Code Online (Sandbox Code Playgroud)
无需“重新排序”字段。您需要做的就是分别为每个字段调用form_label和/或。form_widget例如,假设您使用Twig您可以执行以下操作:
<div>{{ form_label(form.firstName) }}</div>
<div>{{ form_widget(form.firstName) }}</div>
<div>{{ form_label(form.lastName) }}</div>
<div>{{ form_widget(form.lastName) }}</div>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8339 次 |
| 最近记录: |