Mojolicious模板渲染(二十)
一、添加一个处理程序来生成二进制数据
默认情况下,渲染器假定每个处理程序都生成需要自动编码的字符,但如果我们生成的是字节,则很容易禁用它。
use Mojolicious::Lite -signatures;
use Storable qw(nfreeze);
# 增加 "storable" 处理器
app->renderer->add_handler(storable => sub ($renderer, $c, $output, $options) {
# 关闭自动编码
delete $options->{encoding};
# 从stash值中进行编码
$$output = nfreeze delete $c->stash->{storable};
});
# 如果“storable”值已经设置,则自动设置“handler”值
app->hook(before_render => sub ($c, $args) {
$args->{handler} = 'storable' if exists $args->{storable} || exists $c->stash->{storable};
});
get '/' => {storable => {i => '♥ mojolicious'}};
app->start;
Mojolicious中的钩子”before_render”可用于将stash值设置为storeable,这样它们就不再需要显式设置处理程序值。
# 明确 "handler" 的值
$c->render(storable => {i => '♥ mojolicious'}, handler => 'storable');
# 使用 "before_render" 钩子,明确 "handler" 的值
$c->render(storable => {i => '♥ mojolicious'});
二、结语
至此,我们的Mojolicious模板渲染篇便全部讲完了。