値取得
# メソッド(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>