如何修改使用Symfony2生成的表单元素的id?

时间:2016-02-17 10:26:54

标签: symfony

我在Symfony中有一个带有选项卡的应用程序,并且使用Ajax加载异步,因此我可以一次在应用程序中使用两个表单。我有一个表单来注册用户,另一个表单来更新用户数据。在更新表单中,Symfony2通过其生成表单来创建用户(UserType),因此表单元素的id是相同的。

另一方面,我有一个函数来验证表单元素,但是当它验证这些表单中的一个时,验证另一个也具有相同的id元素,因此不能验证每个表单是否正确。

例如,使用Twig {{form_row (edit_form.name)}}使用id = "user_name"为我生成了一个输入,我需要将其修改为更新表单id = "update_user_name"

有没有办法在那段时间更改id属性?

2 个答案:

答案 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属性值”:

基本上:

  1. 覆盖buildView();
  2. 修改$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 ]);
}

干杯。