我在Symfony中有一个带有选项卡的应用程序,并且使用Ajax加载异步,因此我可以一次在应用程序中使用两个表单。我有一个表单来注册用户,另一个表单来更新用户数据。在更新表单中,Symfony2通过其生成表单来创建用户(UserType),因此表单元素的id是相同的。
另一方面,我有一个函数来验证表单元素,但是当它验证这些表单中的一个时,验证另一个也具有相同的id元素,因此不能验证每个表单是否正确。
例如,使用Twig
{{form_row (edit_form.name)}}
使用id = "user_name"
为我生成了一个输入,我需要将其修改为更新表单id = "update_user_name"
。
有没有办法在那段时间更改id属性?
答案 0 :(得分:1)
你可以这样做:
{{ form_row(edit_form.name, { 'id': 'edit_user_name' } }}
如果你想获得原始ID并加上前缀,你可以试试这个:
{{ form_row(edit_form.name, { 'id': 'update_' ~ edit_form.name.vars.id } }}
希望这符合您的需要。
答案 1 :(得分:0)
我想我将从id
实现中删除一个简短的“如何覆盖FormType
属性值”:
基本上:
buildView();
$view->vars['id']
代码段:
/**
* We're setting the `id` attr. as e.g. `appointment-3-pack-221`
*
* @see parent::buildView()
*
* @see \Symfony\Component\Form\Extension\Core\Type\BaseType::buildView()
* Symfony Form component internals where
* the `id` attribute gets its value.
*/
public function buildView(FormView $view, FormInterface $form, array $options)
{
parent::buildView($view, $form, $options);
/** @var Appointment $appt */
$appt = $options['data'];
$id = sprintf("%s-%d-pack-%d", $view->vars['id'], $appt->id, $appt->pack->id);
$view->vars = array_replace($view->vars, [ 'id' => $id ]);
}
干杯。