Mojolicious初学(十一)

一、Home

这里的home是指Mojolicious中的home对象,home对象指向mojolicious启动脚本所在的路径目录。你可以通过home对象去搜索public、templates等上一篇博文中学到的路径。

举个例子,我们在主目录下创建cache文件夹,并创建一个hello.txt:

$ mkdir cache
$ echo 'Hello World!' > cache/hello.txt

home对象继承自Mojo::File,例如child、slurp方法。通过Home对象的各种方法操作主目录下的各种文件,我们可以避免使用绝对路径(windows、linux的绝对路径是不同),方便我们将代码移植到任何平台上:

use Mojolicious::Lite -signatures;

# 通过home对象,我们直接将hello.txt中的内容读取到内存里:
my $hello = app->home->child('cache', 'hello.txt')->slurp;

# 展示hello.txt中的字符串:
get '/' => sub ($c) {
  $c->render(text => $hello);
};

二、Conditions

conditions中文即条件,意思主要是指Mojolicious::Plugin::HeaderCondition,我们可以通过该模块中的agent、host等创造更加丰富的路由构造。也就说,同一个路由url根据agent、host不同指向不同的逻辑方法:

use Mojolicious::Lite -signatures;

# 限制浏览器必须为Firefox
get '/foo' => (agent => qr/Firefox/) => sub ($c) {
  $c->render(text => 'Congratulations, you are using a cool browser.');
};

# 限制浏览器必须为Internet Explorer
get '/foo' => (agent => qr/Internet Explorer/) => sub ($c) {
  $c->render(text => 'Dude, you really need to upgrade to Firefox.');
};

# 限制我们mojolicous应用的域名必须为mojolicious.org,类似nginx的反向代理。
# http://mojolicious.org/bar
get '/bar' => (host => 'mojolicious.org') => sub ($c) {
  $c->render(text => 'Hello Mojolicious.');
};

app->start;

三、Sessions会话

sessions会话,对于任何一个web框架是必不可少。同一个用户,同一台电脑,同一个浏览器在一定时间内访问同一个域名的不同子路径(比如www.lwc365.top,www.lwc365.top/lwc,www.lwc365.top/perl),这一过程称作一个会话。sessions对象的主要作用在于同一个会话的不同网页间,在服务器上共享一些全局标量(不同会话间,这些变量私有的)。

Mojolicious的会话是基于Cookie的。会话最常用的场景是登录认证。

use Mojolicious::Lite -signatures;

# Access session data in action and template
get '/counter' => sub ($c) {
  $c->session->{counter}++;           #我们在session对象中设置一个名为counter的变量,并对此变量做一次自加运算
};

app->start;
__DATA__

@@ counter.html.ep
Counter: <%= session 'counter' %>     #模板中我们可以这样调用session的counter变量

还有一点要注意,启用session前我们需要设置一个秘钥:

app->secrets(['My secret passphrase here']);

 

标签