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']);