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模板渲染篇便全部讲完了。

标签