父模板中的 Twig 设置变量

Posted

技术标签:

【中文标题】父模板中的 Twig 设置变量【英文标题】:Twig setting variable in parent template 【发布时间】:2016-03-29 12:57:15 【问题描述】:

我有几个模板,我需要在其中编写星期几和月份的文字。我创建了一个小树枝文件:

% set numDay = target.dateStop | date ("w", user_timezone) %
% set daysOfWeek = 0: 'Sunday', 1: 'Monday', 2: 'Tuesday', 3: 'Wednesday', 4: 'Thursday', 5: 'Friday', 6: 'Saturday' %
% set weekDay = daysOfWeek[numDay] %

% set numMonth = target.dateStop | date ("n", user_timezone) %
% set months = 1: 'January', 2: 'February', 3: 'March', 4: 'April', 5: 'May', 6: 'June', 7: 'July', 8: 'August', 9: 'September', 10: 'October', 11: 'November', 12: 'December' %
% set month = months[numMonth] %

在我需要这些值的模板中,我首先包含“助手”模板

% include '@.../Email/html/en_US/localized_day_and_month.twig' with [user_timezone] %

然后简单地使用变量

...  weekDay  ...

我仍然收到此错误:

失败:第 9 行的“.../HTML/it_IT:do_deadline_new.html.twig”中不存在变量“weekDay”

我知道我的“本地化日期问题”可能有更好的解决方案,但这不是我的意思

编辑

我在每个模板中继承的基类中移动了第一个 sn-p,但这些变量似乎仍然被忽略:

base.html.twig

% block dateTimeVariables %
    % set numDay = target.dateStop | date ("w", user_timezone) %
    % set daysOfWeek = 0: 'Domenica', 1: 'Lunedì', 2: 'Martedì', 3: 'Mercoledì', 4: 'Giovedì', 5: 'Venerdì', 6: 'Sabato' %
    % set weekDay = daysOfWeek[numDay] %

    % set numMonth = target.dateStop | date ("n", user_timezone) %
    % set months = 1: 'gennaio', 2: 'febbraio', 3: 'marzo', 4: 'aprile', 5: 'maggio', 6: 'giugno', 7: 'luglio', 8: 'agosto', 9: 'settembre', 10: 'ottobre', 11: 'novembre', 12: 'dicembre' %
    % set month = months[numMonth] %
% endblock %

在子模板中:

% extends '@.../Email/HTML/it_IT/base.html.twig' %

然而:

失败:第 6 行的“.../HTML/it_IT:do_deadline_new.html.twig”中不存在变量“weekDay”

第 6 行是这样的:

[ group.name ] Today at  target.created | date("H:i", user_timezone)   agent.name   agent.surname  has created a file due on  weekDay | lower   target.dateStop | date ("d", user_timezone)   month  at  target.dateStop | date ("H:i", user_timezone) .

【问题讨论】:

你用的是哪个版本的树枝? @gioaudino 您的问题可能会像我在这个问题中概述的解决方案一样得到解决:***.com/a/32642249/2970321 【参考方案1】:

来自twig doc :

include 语句包含一个模板并将该文件的渲染内容返回到当前命名空间。

AFAIK 仅会渲染包含文件,已在包含文件中设置的任何变量都不会添加到父命名空间。

因此请尝试使用扩展。像这样:

parent.twig

   % set numDay = target.dateStop | date ("w", user_timezone) %
   % set daysOfWeek = 0: 'Sunday', 1: 'Monday', 2: 'Tuesday', 3: 'Wednesday', 4: 'Thursday', 5: 'Friday', 6: 'Saturday' %
   % set weekDay = daysOfWeek[numDay] %

   % set numMonth = target.dateStop | date ("n", user_timezone) %
   % set months = 1: 'January', 2: 'February', 3: 'March', 4: 'April', 5: 'May', 6: 'June', 7: 'July', 8: 'August', 9: 'September', 10: 'October', 11: 'November', 12: 'December' %
   % set month = months[numMonth] %

child.twig

% extends 'parent.twig'%

【讨论】:

实际上我包含localized_day_and_month的模板已经扩展了另一个模板,并且不允许多重继承。我想最好的选择是将这些变量设置器移动到父模板中,并且只扩展那个删除包含语句 乐于助人。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受 我仍然得到那个错误。我编辑了问题以显示更改 好的,我想我知道问题所在。去掉% block dateTimeVariables %,直接在基础模板中设置变量即可。

以上是关于父模板中的 Twig 设置变量的主要内容,如果未能解决你的问题,请参考以下文章

Symfony/Twig 在 if 条件下设置变量

如何使用 Laravel8 中的 Twig 扩展注入 php GraphQL 查询结果,在 Twig(Bridge) 模板中定义查询?

Drupal 8添加javascript并使用自定义模块在钩子中传递数据

外部 JS 文件中的 Twig 变量

如何将php变量传递给twig模板

Symfony4 Twig模板错误:变量“小部件”不存在