Mojolicious初学(五)

一、模板Template代码块——blocks

blocks代码块,可以像是写Perl语言sub函数一样,在template模板中编写一段代码,在后续的html标签中如同函数一般的随处调用。

blocks代码块,以begin开头,end结尾,我们来看一个例子:

use Mojolicious::Lite;

get '/with_block' => 'block';                           #这里router起了一个name——block,不懂的请看上一篇文章

app->start;
__DATA__

@@ block.html.ep
% my $link = begin                                     #此处开始写blocks,这里类似一个闭包、匿名函数。$link为函数名一样
% my ($url, $name) = @_;
Try <%= link_to $url => begin %><%= $name %><% end %>. 
% end                                                  #此处为blocks结尾
<!DOCTYPE html>
<html>
<head><title>Sebastians frameworks</title></head>
<body>
%= $link->('http://mojolicious.org', 'Mojolicious')    #这里及下一行,均为调用$link代码块。括号中代表着$url和$name两个参数。
%= $link->('http://catalystframework.org', 'Catalyst')
</body>
</html>

二、Helpers

helper代表着一种Mojolicious开发方式,即创造一个全局的关键字,该关键字代表着一类函数——一类可以同时在Mojolcious后台和template模板中调用的全局函数。由于我不是什么权威专家,所以helper我仍旧将他作为一个专有名词,而不翻译为中文。

下面看一个例子:

use Mojolicious::Lite -signatures;

# 下面是创建一个helper的方法:
helper whois => sub ($c) {
my $agent = $c->req->headers->user_agent || 'Anonymous';
my $ip = $c->tx->remote_address;
return "$agent ($ip)";
};

# 这是在后台router逻辑中如何调用helper
get '/secret' => sub ($c) {
my $user = $c->whois;                            #此处调用了whois helper
$c->app->log->debug("Request from $user");
};

app->start;
__DATA__

@@ secret.html.ep
We know who you are <%= whois %>.               #同样,我们也可以在template直接使用whois

三、插件plugins

顾名思义,插件就是其他开发者针对Mojolicious开发的,可以供其他开发者使用的代码,通常开发者会将他提交到Mojolicious::Plugin::下。

直接用一个例子看看使用方法:

use Mojolicious::Lite;

plugin Config => {file => '/etc/myapp.conf', default => {foo => 'bar'}};  #此处声明了Mojolicious应用需要使用Config插件,花括号中{}为插件的初始化方法。

# Return configured foo value, or default if no configuration file
get '/foo' => sub ($c) {
my $foo = $c->app->config('foo');                                         #这里,我们在route逻辑中调用了config插件。
$c->render(json => {foo => $foo});
};

app->start;

 

 

 

标签