値取得
# メソッド(get/post等)
my $method = lc $self->req->method;
# HTTPヘッダ
my $x_forwarded_host = $self->req->headers->header('X-Forwarded-Host');
my $content_type = $self->req->headers->content_type;
my $accept_language = $self->req->headers->accept_language;
#ホームディレクトリ
my $home = $self->app->home;
# -> /Users/xxx/Sites/Myapp
# モード(development/production/MOJO_MODEの値)
my $mode = $self->app->mode;
# UA
my $ua = $self->req->headers->user_agent;
# リモートIPアドレス
my $ip = $self->tx->remote_address;
リンク
- Mojolicious - GitHub
https://github.com/yuki-kimoto/mojolicious-guides-japanese/wiki/Mojolicious
変更点
- Mojolicious 6に向けて、互換性が崩れる部分をピックアップしておきます。 - サンプルコードによるPerl入門
- 最近の主な変更点 · yuki-kimoto/mojolicious-guides-japanese Wiki · GitHub
ぶわっと作る
- Mojolicious最速マスター - Qiita(yusukebeが2013-12-19に投稿)
- Perlによる速習プランもしくは「Webアプリエンジニア養成読本」番外編 - ゆーすけべー日記(2014-03-20/ブックマークアプリShioriの作成)
いろいろ
ダンプ dump
lib/Bloc.pm
package Bloc;
use strict;
use warnings;
use Data::Dumper;
{ no warnings; package Data::Dumper; sub qquote { return shift; } }
$Data::Dumper::Useperl = 1;
1;
コントローラ等から
die $self->helpers->dumper($aaa);
stashのデフォルト値
sub starup {
my $self = shift;
$self->defaults({foo => 'bar'});
}
Mojolicious
アプリケーション
レンダリング
基本的な書き方
# インライン
<% Inline Perl %>
<%= エスケープされる %>
<%== エスケープされない %>
<%# コメント %>
<%= エスケープされる =%> # 後ろに=をつけると(インデント用に記してある)空白スペースを削除
# 行
% Perl line
%= エスケープされる
%== エスケープされない
%# コメント
エスケープされるのは「>」「<」「"」「'」「&」。
# 一部だけエスケープの対象外に(Mojo::ByteStreamオブジェクト)
<%= b('<p>test</p>') %>
ヘルパ
#クエリ付き(元のオブジェクトを変更しないようにcloneを用いる)
<%= url_for('route_name')->clone->query(foo => 'a', bar => 'b') %>
自作ヘルパ/プラグインの作成
/Mojolicious/Plugin/TagHelpers.pm あたりを参考に、libフォルダ内に、Mojolicious/Plugin/MyHelper.pm を作成。
package Mojolicious::Plugin::MyHelper;
use Mojo::Base 'Mojolicious::Plugin';
sub register {
my ($self, $app) = @_;
$app->helper(
remove_sec => sub {
my $c = shift;
my $text = shift;
return $self->_remove_sec($text);
}
);
}
sub _remove_sec {
my $self = shift;
my $text = shift;
if($text =~ /^(\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}):\d{2}$/){
return $1;
}
else{
return $text;
}
}
1;
startup 内に以下の記述で読み込み。
$self->plugin('my_helper');
セッション
session
sub sample {
my $self = shift;
$self->session('name' => 'Yugo'); #セッションにデータ保存
my $name = $self->session('name'); #セッションからデータを取得
$self->session(expires => 1); #セッションを破棄
}
#あるいはrender内で
<%= session 'name' %>
flash
次のリクエストにだけ引き継がれるセッション。
例えばリダイレクトの際など。
sub sample1 {
my $self = shift;
$self->flash(msg => 'done!');
$self->redirect_to('/manage/test');
}
sub test {
my $self = shift;
my $msg = $self->flash('msg');
}
#あるいはrender内で
<%= flash 'msg' %>
リストを渡す
sub sample {
my $self = shift;
$self->flash(msgs => ['done1!', 'done2!']);
$self->redirect_to('/manage/test');
}
# render
% for my $msg( @{$self->flash('msgs')} ){
<p><%= $msg %></p>
% }
SSL/httpsへリンク
url_for('/foo')->to_abs->scheme('https')
<a href="<%= url_for('/foo')->to_abs->scheme('https') %>">Foo</a>