Как вывести предупреждение в блоке Template :: Toolkits CATCH? - PullRequest
5 голосов
/ 13 сентября 2011

Код, над которым я работаю, содержит несколько блоков TRY / CATCH в шаблонах Template::Toolkit. Они выглядят так:

[% 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 %]

но это кажется слишком многословным для того, что должно быть простым делом. Есть ли какой-нибудь лучший способ, которым я не знаю, чтобы сделать это?

1 Ответ

8 голосов
/ 23 сентября 2011

Отличная идея!Я никогда не думал об этом, но сейчас внедряю решение для моей собственной системы.

И это возможно из коробки!Фильтр stderr печатает выходные данные блока в STDERR:

[% FILTER stderr %]  
   Found a big problem
[% END %]

Не требуется MVC, нет кода, просто лучшая жизнь.

Более продвинутый способ сделать это - создать объектв вашем контроллере, чья работа состоит в том, чтобы регистрировать ошибки, чтобы он мог обрабатывать их более разумно:

[% logger.warn ('Big Problem')%]

Он может отправить им электронное письмоих в журнал или смс для разработчика, который вам не нравится.; -)

...