Mojolicious模板渲染(三)

我们继续第二篇中关于embedded perl的讲解。

一、继续上篇中嵌入式perl

我们可以通过一个反斜杠转移为换行符:

This is <%= 1 + 1 %> a\
single line

当我们需要一个反斜杠时,可以通过在反斜杠前面再加一个反斜杠:

This will <%= 1 + 1 %> result\\
in multiple\\
lines

在每一个模板文件中换行符是默认添加的,使用反斜杠符转义换行符是一种特殊情况(可以视为手动加入换行符):

There is <%= 1 + 1 %> no newline at the end here\

在模板文件的最开始位置,通过stash方法中的参数(该参数字符串不含有无效字符,即Perl标量名称不予许的字符),都会被初始化为一个Perl普通变量。在模板中controller对象可以用$c或$self变量表示:

$c->stash(name => 'tester');
 
Hello <%= $name %> from <%= $c->tx->remote_address %>.

通过myapp.*作为stash中参数键,可以存储一些你不想公开的变量(这是官方文档的翻译,我暂时还未搞清楚此条目的意义):

$c->stash('myapp.name' => 'tester');

在ep中我们还可以使用Mojolicous初学中提到的helper函数:

<%= dumper {foo => 'bar'} %>

二、关于自动渲染

渲染器render可以通过controller对象的render方法进行调用:

my $bool = $c->render;
my $bool = $c->render(foo => 'bar', baz => 23);
my $bool = $c->render(template => 'foo/index');
my $bool = $c->render(template => 'index', format => 'html');
my $bool = $c->render(data => $bytes);
my $bool = $c->render(text => 'Hello!');
my $bool = $c->render(json => {foo => 'bar'});
my $bool = $c->render(handler => 'something');
my $bool = $c->render('foo/index');

但是在大多数情况,我们不需要显示的调用特定的模板。只要我们的路由设置,与templates中的模板是匹配的,mojo会自动为我们调用,我们只需这样写:

$c->render;

当了,上面这个例子要注意了,它是通过调用Mojolicious的controller_class方法来间接的查找并渲染模板。而render中使用参数直接指向模板文件的。

当我们执行非堵塞的操作时,我们可以通过render_later方法来关闭自动渲染:

$c->render_later;

标签