Perl 和模板工具包:自定义过滤器中的对象字符串化

发布于 2024-10-23 13:44:35 字数 473 浏览 6 评论 0原文

在我的模板中(通过 Template Toolkit),我传递了一个 DateTime 对象(来自 DBIx::ClassDBIx::Class::InflateColumn::DateTime)。我可以在模板中执行 obj.year 和所有其他 DateTime 操作。但该对象在我的自定义过滤器中被字符串化。我基本上是在打电话 [% user.last_visited_date | time_ago %] 其中 time_ago 是一个自定义过滤器,基本上如下所示:

sub timeago { 
   sub { my $datetime_obj = shift; #do more work }
}

这里我期望自定义过滤器中有一个 DateTime 对象,但它是 stringify 。

我该如何解决这个问题?

in my template(via Template Toolkit), I pass a DateTime object(from DBIx::Class and DBIx::Class::InflateColumn::DateTime). I can do obj.year and all other DateTime operations in my template. But the object gets stringified in my custom filter. I am basically calling [% user.last_visited_date | time_ago %] where time_ago is a custom filter basically looks like this:

sub timeago { 
   sub { my $datetime_obj = shift; #do more work }
}

here I am expecting a DateTime obj in the custom filter but instead it is stringify..

How do I work around this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小猫一只 2024-10-30 13:44:35

不要使用过滤器,而是编写一个自定义插件

[% YourPlugin.time_ago(user.last_visited_date) %]

或者添加 自定义 vmethod

[% user.last_visited_date.time_ago %]

过滤器用于文本修改,例如 HTML编码等。

Don't use a filter for that, write a custom plugin instead:

[% YourPlugin.time_ago(user.last_visited_date) %]

Or add a custom vmethod:

[% user.last_visited_date.time_ago %]

Filters are meant for text mangling such as HTML encoding and the like.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文