Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 向所有窗体添加属性_Symfony_Symfony4_Symfony Forms - Fatal编程技术网

Symfony 向所有窗体添加属性

Symfony 向所有窗体添加属性,symfony,symfony4,symfony-forms,Symfony,Symfony4,Symfony Forms,我想将autocomplete=“off”添加到我的symfony项目中的所有标记中,我正在寻找这样做的最佳方法 我不想更改所有模板以更改{{form_start}}调用或手动在控制器中的表单对象上添加属性,也不想在每个表单上添加侦听器或订阅者 我正在寻找一个全球性的解决方案,比如一次呼叫就能改变所有形式的服务。我得到了您想要的autocomplete是一个HTML属性,所以据我所知,它不是由symfony直接管理的 我找到的最快的解决方案就是将下面的代码添加到base.html.twig文件中

我想将
autocomplete=“off”
添加到我的symfony项目中的所有
标记中,我正在寻找这样做的最佳方法

我不想更改所有模板以更改
{{form_start}}
调用或手动在控制器中的表单对象上添加属性,也不想在每个表单上添加侦听器或订阅者


我正在寻找一个全球性的解决方案,比如一次呼叫就能改变所有形式的服务。

我得到了您想要的
autocomplete
是一个HTML属性,所以据我所知,它不是由symfony直接管理的

我找到的最快的解决方案就是将下面的代码添加到base.html.twig文件中

<script>
    $('form').attr('autocomplete','off');
</script>
检查这个链接,也许你会发现一些更有用的东西


我希望我能帮助你。:-)祝您愉快,再见

我认为如果这是所有表单的默认行为,那么最好考虑一个根解决方案。 默认情况下,扩展类型就可以做到这一点

class FormTypeExtension extends AbstractTypeExtension
{
    /**
     * Return the class of the type being extended.
     */
    public static function getExtendedTypes(): iterable
    {
        // return FormType::class to modify (nearly) every field in the system
        return [FormType::class];
    }

    public function buildView(FormView $view, FormInterface $form, array $options): void
    {
        if (isset($view->vars['method'])) { // Make sure we're on the base form
            $view->vars['attr']['autocomplete'] = isset($view->vars['attr']['autocomplete']) ? $view->vars['attr']['autocomplete'] : "off"; // let the possibility to override for specific forms
        }
    }
}
你只需要像那样使用它

class DefaultController extends AbstractController
{

    /**
     * @Route("/", name="home")
     */
    public function home() {

        $form1 = $this->createForm(DemoType::class, new Demo());
        $form2 = $this->createForm(DemoType::class, new Demo(), ['attr' => ['autocomplete' => "on"]]);

        return $this->render('demo.html.twig', ['form1' => $form1->createView(), 'form2' => $form2->createView()]);
    }

}

我想,您可以使用扩展FormType的FormTypeExtension来实现这一点。这更多的是针对元素,我想我会使用javascript解决方案。这是针对所有表单类型,使用js无法测试您的功能。这是我最初做的,但我一直在寻找一个不使用javascript的更好的解决方案。我想没有其他选择了。谢谢,这正是我想要的。
class DefaultController extends AbstractController
{

    /**
     * @Route("/", name="home")
     */
    public function home() {

        $form1 = $this->createForm(DemoType::class, new Demo());
        $form2 = $this->createForm(DemoType::class, new Demo(), ['attr' => ['autocomplete' => "on"]]);

        return $this->render('demo.html.twig', ['form1' => $form1->createView(), 'form2' => $form2->createView()]);
    }

}