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;