首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Symfony 3中创建将在页眉中的每个子页面上显示的表单

如何在Symfony 3中创建将在页眉中的每个子页面上显示的表单
EN

Stack Overflow用户
提问于 2016-11-19 00:58:54
回答 3查看 1K关注 0票数 3

我想在网站的每个子页面上显示相同的表单。在每个控制器的每个操作中将其传递给Twig是没有意义的。我不想创建某种将表单传递给Twig的BaseController。

我觉得应该可以通过一些配置或服务注入来实现,但我找不到合适的方法。

我已经将form作为服务app_bundle.user.form.type.locale,但是在哪里注入它以及如何将参数传递给form。

编辑:

表单的action属性将始终是当前地址,因此它将如下所示的<select action="">

EN

回答 3

Stack Overflow用户

发布于 2016-11-19 02:46:15

有几种方法可以做到这一点。

在基本模板中嵌入另一个控制器

一种方法是制作一个控制器,它将只呈现您需要的表单。然后将该控制器嵌入到基本模板中:

代码语言:javascript
运行
复制
{{ render(controller('AppBundle:MyFormController:form')) }}

这在您的情况下会工作得很好,并且是Symfony文档中推荐的策略之一:Embedding controllers

使用Twig扩展

另一种方法是使用Twig扩展。您可以创建一个twig扩展,它将实现一个返回表单的函数

大致是这样的:

代码语言:javascript
运行
复制
class AppExtension extends \Twig_Extension
{
    private $formFactory;

    public function __construct(FormFactory $formFactory)
    {
        $this->formFactory = $formFactory;
    }

    public function getFunctions()
    {
        return array(
            new \Twig_SimpleFunction('create_my_form', array($this, 'createMyForm')),
        );
    }

    public function createMyForm()
    {
        return $this->formFactory->create(MyFormType::class);
    }

    public function getName()
    {
        return 'app_extension';
    }
}

有关如何连接您自己的twig扩展的说明,请参阅文档:http://symfony.com/doc/current/templating/twig_extension.html

使用块

第三种方式也很常见,那就是使用“块”。从使用的角度来看,这与嵌入控制器非常相似。主要区别在于,块不会发出子请求。我认为这对你来说并不重要,因为你只需要在一个地方使用它,但是对于在一个页面上有几十个块的网站来说,发出太多的子请求会降低性能,特别是在开发环境中。

虽然您可以使自己的实现变得非常简单,但是您也可以使用现有的包:SonataBlockBundle

票数 4
EN

Stack Overflow用户

发布于 2016-11-19 02:12:25

你熟悉Twig的{% extends ... %}语法吗?

你可以读到关于inheritance in this link的文章。

这似乎是最好的解决方案。

票数 0
EN

Stack Overflow用户

发布于 2016-11-19 02:43:46

您可以编写一个Twig扩展,该扩展添加一个自定义Twig函数,该函数将使用您的自定义表单类型初始化表单构建器,然后返回创建的视图。创建扩展后,您可以在基本模板中调用新的Twig函数,并照常呈现表单。

请注意,在呈现表单时,必须在模板内显式配置表单操作。否则,它将始终被发送到呈现当前页面的控制器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40682363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档