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;