Perl Mojolicious

Mojoliciousとは?

Webフレームワーク
読み方:モジュリシャス
PerlのWebアプリケーションフレームワーク
MVCフレームワークにおける、ViewとControllerの機能を持つ。
Perl 5.10.1 以降で動作。

Mojoliciousコマンド

起動

$ morbo ~.pl
・Webアプリケーション読込
・開発用サーバー起動
・デフォルトでローカルホスト:127.0.0.1:3000で待機

停止

コマンドライン上で、「Ctrl」+「C」

ひな形を作る

$ mojo generate lite_app ファイル名
Mojolicious::Liteを使ったひな形が作成される
開発用アプリケーションサーバーの起動
$ morbo ファイル名
⇒画面上に、Server available at http://127.0.0.1:3000.と表示される
ブラウザで↓ にアクセスできる
http://127.0.0.1:3000

ひな形の中身

※mojo generate lite_app~で作成されるファイルの中身

#!/usr/bin/env perl
use Mojolicious::Lite; ※Mojolicious利用の為のモジュール
# Documentation browser under "/perldoc"
plugin 'PODRenderer'; ※機能拡張の為のプラグイン「PODRenderer」を使用
#get関数の呼び出し
get '/' => sub {
  my $c = shift;
  ※コントローラーのrenderメソッドを実行(indexを出力)
  $self->render('index'); 
};
#実行
app->start;
#以降をデータとして扱う(Welcome to ~ の文字がデータとして扱われてブラウザに表示される)
これによりコントローラー部と同じファイルにビュー部を書ける
(ビューが複雑な場合は別ファイルに記述)
__DATA__
#次に@@が出てくるまでの範囲をindex.html.epというファイルとして扱う(ep拡張子はテンプレートファイル)
@@ index.html.ep
#テンプレート内での「%」はその行をPerlのコードとして実行する(<% ~ %> も可)
#レイアウトの指定(layoutsフォルダ内のレイアウトファイルを適用する)
% layout 'default';
% title 'Welcome'; #title関数(Welcomeを指定)
Welcome to the Mojolicious real-time web framework!
@@ layouts/default.html.ep
<!DOCTYPE html>
<html>
  #↑で格納したtitle関数の呼び出し
  <head><title><%= title %></title></head>
  <body><%= content %></body>
</html>

ルーティング

(ページ名)へのgetリクエスト受信時
get '/(ページ名)' => sub {
 
}
(ページ名)へのpostリクエスト受信時
post '/(ページ名)' => sub {
 
}

get '/' => sub {
 #コントローラーオブジェクトの受け取り
 (HTTPリクエスト毎に生成される、Mojolicious::Controllerクラスのオブジェクト)
 my $c = shift;
 
 Viewで使用できる変数($value1)を定義
 $c->stash( value1 => 'Perl' );
 
 Viewで使用できる変数($value2)を定義
 my $value = 'Perl'
 $c->stash( value2 => $value );
 
 #レンダリング(描画)
 #Mojolicious::Controllerオブジェクト.render()メソッドを実行

 $c->render(template => 'index');
 テンプレートファイルを使用してindexを描画
 
 リダイレクト(別ページへ遷移させる場合)
 $c->redirect_to('ページ名');
};
app->start;
__DATA__

@@ index.html.ep
<p><%= $value1 %></p>
→Perl
<p><%= $value2 %></p>
→Perl

データ送受信

GET

get '/' => sub {
 my $c = shift;
 
 パラメータ名:getdataのデータを取得
 my $ret = $c->param('getdata');
 
 $c->render(template => 'index');
};

@@ index.html.ep
%= form_for '/' => begin
%= form_for '/' => method => 'GET' => begin
 Mojoliciousヘルパーメソッド(専用html生成コマンド)
 %= text_field 'getdata'
 パラメータ名:getdataでデータをGET送信
 %= submit_button '投稿する'
% end
<p><%= $value1 %></p>
→Perl
<p><%= $value2 %></p>
→Perl

POST

post '/' => sub {
 my $c = shift;
 
 パラメータ名:postdataのデータを取得
 my $ret = $c->param('postdata');
 
 $c->render(template => 'index');
};
@@ index.html.ep
%= form_for '/' => method => 'POST' => begin
 Mojoliciousヘルパーメソッド(専用html生成コマンド)
 %= text_field 'postdata'
 パラメータ名:postdataでデータをPOST送信
 %= submit_button '投稿する'
% end
<p><%= $entry %></p>

ANY

GET、POST共通の値取得処理
any '/' => sub {
 my $c = shift;
 my $ret = $c->param('パラメータ名');
 $c->render(template => 'index');
};