【问题标题】:Add a variable to all rendering为所有渲染添加一个变量
【发布时间】:2017-09-06 12:12:40
【问题描述】:

我正在运行一个 symfony 应用程序,我想设置一个从所有控制器到所有渲染的新变量。

原因是我的页脚中的某些内容已变为动态并且符合 MVC 模式,我想将这些新数据的处理放在我的控制器中。

用 symfony 做这件事的好方法是什么?

编辑

我没有将 symfony 用作 REST API,Symfony 服务器仅将 twig 呈现的模板作为 HTML 提供。

我的案例详情

当前的 twig 模板具有硬编码的表单标题:

<div>
    <h2>Today</h2>
    <!-- today's inputs .... -->
</div>
<div>
    <h2>Tomorrow</h2>
    <!-- tomorrow's inputs .... -->
</div>

我想为我的观点提供变量:$today$tomorrow。 这样我就可以呈现日期名称而不是今天或明天。

<div>
    <h2>{{ today }}</h2>
    <!-- today's inputs .... -->
</div>
<div>
    <h2>{{ tomorrow }}</h2>
    <!-- tomorrow's inputs .... -->
</div>

例如,如果今天是星期二,则必须以这种方式分配变量: $today = "Tuesday"$tomorrow = "Wednesday"

还有

这不是关于这个具体案例的问题。我现在想知道是否有一种方法可以将变量传递给所有视图而无需编辑所有控制器。正如我所看到的,我会为所有控制器添加一个父操作来生成这个变量。我只是想知道这是否是通常的方式。

我不想使用 ajax 调用,也不想将复杂的 twig 代码放入我的模板中。我想通过控制器来处理这个问题。

【问题讨论】:

标签: symfony model-view-controller


【解决方案1】:

请阅读有关using global variables的官方文档。

在我的脑海中 - 你可以注射......

  1. ...来自全局 twig 配置的标量值
  2. ...来自服务容器参数的标量值
  3. ...服务(读取 php 对象)

或者你可以写 Twig 扩展,比如:

class DateExtension extends \Twig_Extension
{
    public function getFunctions()
    {
        return [
            new \Twig_SimpleFunction('get_date', array($this, 'getDate'))
        ];
    }


    public function getDate($date)
    {
        // format it how you want
        return (new \DateTime($date))->format('Y-m-d H:i:s');
    }
}

然后只需通过以下方式在任何模板中使用它:

<div>
    <h2>{{ get_date('today') }}</h2>
    <!-- today's inputs .... -->
</div>
<div>
    <h2>{{ get_date('tomorrow') }}</h2>
    <!-- tomorrow's inputs .... -->
</div>

【讨论】:

    【解决方案2】:

    您所说的“动态”是什么样的?如果这种动态来自更改存储在应用程序数据存储中的某些值,那么我相信,您可以定义控制器操作以从例如您的数据库中检索此数据,然后在每次页面加载时通过 AJAX 调用它在客户端获取这些值。或者甚至可以使用 WebSocket 的帮助。但这只是假设。如果您确实需要帮助,您应该向我们提供有关您的任务背景的更多信息。

    【讨论】:

    • 我不想从数据存储中检索任何值,但我希望能够通过控制器进行一些数据转换。请检查我所做的修改
    • 我相信 Tobias Xy 评论链接中描述的内容与您的问题最为相关。而且,我认为在每个控制器中定义它没有任何意义——您只需要定义基本模板并将所有其他模板通用的 html 放在此处(以及定义的服务调用)并扩展它。
    猜你喜欢
    • 2021-08-08
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多