kdoc - Mojolicious

  • 作成日:2011-06-27 17:53:49
  • 修正日:2015-12-25 09:38:19

値取得

↑ページトップへ

# メソッド(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;

↑ページトップへ

変更点

ぶわっと作る

いろいろ

↑ページトップへ

ダンプ 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>