【发布时间】:2011-11-16 05:24:30
【问题描述】:
我正在处理的代码在Template::Toolkit 模板中有一堆TRY/CATCH 块。它们看起来像这样:
[% TRY; x = OBJ.method(data); CATCH; "<!-- error: $error -->"; END %]
从两个角度来看,这很糟糕。首先,错误被插入到交给用户的 HTML 中,其次,开发人员很难找到错误。在我看来,所有错误都应该记录到同一个错误日志中。现在我通过warn 函数做到这一点。我已将上面的代码更改为
[% TRY %]
[% x = OBJ.foo(data) %]
[% CATCH %]
[% RAWPERL %]
warn "error calling method foo on a bar object: " . $stash->get("error");
[% END %]
[% END %]
但是对于本应简单的事情来说,这感觉太冗长了。有没有我不知道的更好的方法来做到这一点?
【问题讨论】:
-
你必须在模板中这样做吗?我认为这种(相对)复杂的结构属于准备要显示的数据的代码(即控制器,如果我们使用 MVC 术语),而不是模板本身。
-
@Michal 原则上我完全同意你的观点,但假设代码位于 MVC 框架中。可悲的是,这是令人讨厌的遗留代码。没有控制器类。
-
我仍然会尝试在业务逻辑和表示之间引入尽可能多的分离,例如在模板开头的单个
[% RAWPERL %]块中完成大部分工作,然后再获取任何内容渲染。
标签: perl template-toolkit