在Symfony2表单构建器上设置root元素的属性

时间:2014-03-07 13:27:40

标签: php symfony formbuilder

大家好我正在使用symfony2表单构建器,我想在表单元素上添加属性,所需的效果是这样的:

<form
    data-login="<?php echo $view['router']->generate('login_check'); ?>"                
    data-register="<?php echo $view['router']->generate('register'); ?>"
    action="<?php echo $view['router']->generate('login_check'); ?>"
    method="post"
    id="ajaxLoginForm"
    name="login_form">

我正在使用php模板。我怎么能做到这一点?

感谢您的时间。 如果您有疑问,请在评论部分询问。 最好的祝福, 的Georgi。

2 个答案:

答案 0 :(得分:2)

不幸的是,通过FormBuilder采取与自定义表单字段相同的方式,这是不可能的。要对根表单元素执行此操作,在表单类的setDefaultOptions(扩展AbstractType的那个)上,您应该返回attr密钥,并返回相应的value是属性名称的关联数组=&gt;值:

public function setDefaultOptions(OptionsResolverInterface $resolver) {

    $resolver->setDefaults(array(
        'attr' => array('id' => 'ajaxLoginForm'),
        ...
    ));
}

对于表单name属性,只需实现(在同一个类上)

public function getName() {

    return 'login_form';
}

正确实施上述方法后,应正确呈现属性,而无需对模板或表单主题执行任何修改。

注意:您可能必须在表单中注入路由器组件(或在实例化时将其作为选项传递),以便为data-logindata-register创建所需的路由。 {{1}}属性。

答案 1 :(得分:0)

对于属性使用

<?php echo $view['form']->form($form, array(
    'attr' => array(
        'data-login' => $view['router']->generate('login_check'),                
        'data-register' => $view['router']->generate('register'),
        // etc...
    ),
)) ?>

对于特定属性,您可以使用

// In form class
$builder->setAction('/login_check');
$builder->setMethod('post');