入力フォームでデータを入力し、そのデータを流用してページを表示するケース

  • $self->param()メソッドを使う。
  • 入力フォームでは、<form action="/ページ名" method="post"> ~テキストボックス、ボタンなど~ </form>を使う。
  • /ページ名は、でーたの送り先、メソッド=postは、webサーバにpostでデータを投げる。
<input type = "submit,text,radioなど。部品を指定" name = 'パラメータ変数名' />

/ページ名 のpostで送られた(受けた)側の処理は・・・

post '/ページ名' =>  sub {
my $self = shift;
my $name = $self->param('パラメータ変数名');
$self->stash($name=>'namaefield');
$self->render();
}=>'page'
でpageテンプレートにデータを投げる。

_
_DATA__
@
@page.html.ep
 <html>
<head></head>
<body>
<%= $namaefield %>
</body>
 </html>

----------------------------------------------------------------------------------------

stashで投げるデータが複数ある場合(テーブル等でまとめる場合)は、ハッシュや配列のリファレンスを使い、まとめて投げることもできる。

$self->stash(matomari=>{a=>1,b=>2,c=>3}); 

テンプレ側は、<%= $matomari->{a} %>でハッシュからデータを展開する。

 ----------------------------------------------------------------------------------------

テンプレ内にperlのコードを埋め込む場合・・・
% を行頭に書くと、その行はperlのコードとして実行される。html内に動的な処理を書くことができる。 

  ----------------------------------------------------------------------------------------

レイアウト
・・・共通的なhtml記述は、共通テンプレ+各個別bodyに分けて記述できる。body部分を各々テンプレを作り、そこで 共通テンプレを呼び出せば、共通部品を組み込むことができる。

@@ layout/common.html.ep 
<html>
<head><title><%= title %></title></head>
<%= content %>・・・ここに各個別のbodyが埋め込まれる。
</html>

@@ hello.html.ep
% layout 'common',title=>'ページタイトル';・・・layout関数を使う。各ページタイトルはtitle変数で渡せる。