Object Oriented Perl DocumentWorkSpace

 Object Oriented Perl DocumentWorkSpace>>


<<CONTACT>>

下記フォームに必要事項を入力後、確認ボタンを押してください。

お問い合わせ内容
お名前 ※必須
電話番号(半角)
Mail(半角) ※必須
性別 男 
サイトを知ったきっかけ 友人・知人  検索エンジン
お問い合わせ内容

 

Ⅱ.Perl Catalyst PROGAMMING

1.Catalyst MVCモデル

この章では実際にMVCモデルを使用した開発を進めていきます。前回controllerのみを使用したプログラムを作成しましたが、そのコントローラを使用して作成を進めていきます。 (1)Viewクラスの作成 では今回は「こんにちは 世界!!Hello World!!」をViewを使用してウェブブラウザに表示します。Catalyst::ViewクラスのビューコンポーネントであるCatalyst::View::TT(テンプレートツールキット)を使用して画面に出力します。 Template ToolkitはPerlで利用できる代表的なテンプレートエンジンの一つでCatalystでViewを作成する場合には有効的なテンプレートエンジンです。 ではテンプレートツールキットを使用してViewクラスのモジュールを作成します。ビュークラスの作成はチェンジディレクトリでScriptフォルダに移動してヘルパースクリプトによって作成します。 ヘルパースクリプトで使用するコマンドは次の通りです。

<ビュークラスの作成>
[APP_NAME]_create.pl view ビュークラス名 タイプ名
 前回、HelloプロジェクトのControllerのモジュールを使用しますので、コマンドは[Hello_create.pl]になります。ビュークラス名はHTMLでもMyviewのような名前をつけますが今回は[TT]で、タイプ名は[TT]と固定してしまってよいでしょう。タイプは最終的な "TT"はCatalyst::Viewクラスのタイプを意味し "TT"はTemplate Toolkitビューを使用することを示します。実際に使用するコマンドは次のコマンドを入力して実行してください。
hello_create.pl view TT TT
 コマンドを入力すると次のような表示がされます。
C:\data\Hello\script>Hello_create.pl view TT TT
 exists "C:\data\Hello\lib\Hello\View"
 exists "C:\data\Hello\t"
created "C:\data\Hello\lib\Hello\View\TT.pm"
created "C:\data\Hello\t\view_TT.t"

C:\data\Hello\script>
 これでビュークラスが作成されました。作成されたビュークラスはC:\data\Hello\lib\Hello\Viewに作成されたTT.pmです。
<TT.pmモジュール>
package Hello::View::TT;
use Moose;
use namespace::autoclean;

extends 'Catalyst::View::TT';

__PACKAGE__->config(
    TEMPLATE_EXTENSION => '.tt',
    render_die => 1,
);

=head1 NAME

Hello::View::TT - TT View for Hello

=head1 DESCRIPTION

TT View for Hello.

=head1 SEE ALSO

L

=head1 AUTHOR

A clever guy

=head1 LICENSE

This library is free software. You can redistribute it and/or modify
it under the same terms as Perl itself.

=cut

1;
作成されたモジュールはCatalyst::View::TTコンポーネントを継承したクラスです。これが初期状態のViewクラスで今回はそのまま使用します。 (2)テンプレートファイルの作成  テンプレートファイルはHTMLドキュメントのようなもので、今回自分で記述し作成します。ファイル名はコントローラクラスのアクションメソッドで今回は[introView.tt]とします。  後ほどTemplate Toolkitを使用して作成しますが、Template Toolkitは非常にフル機能のテンプレート機能で優れたドキュメントがありますが、これはTTチュートリアルではないので、ここではTTの基本的な使い方に固執します。  ファイルはプロジェクトファイル/rootフォルダの直下に配置します。Template Toolkitドキュメントhttp://template-toolkit.org/
[introView.tt]
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="stylesheet.css" >
<meta charset="UTF-8">
<title>[% msg1 | html %]</title>
</head>
<body>
<h1>[% msg1 | html %]</h1>
<p>[% msg2 | html %]</p>
<h2>[% msg3 | html %]</h2>
<p>[% msg4 | html %]</p>
<h2>[% msg5 | html %]</h2>
<p>[% msg6 | html %]</p>
</body>
</html>

 この場合の記述として、[% %]はテンプレートのTT部分のマーカーでコントローラクラスから指示されたの動的な処理を表示するブロックです。内部でPerlの変数とクラスにアクセスし、変数や処理を表示することができます。この例では、テンプレートファイル(hello.tt)の名前を定義する特別なTT変数を使用しています。残りのテンプレートは通常のHTMLです。ブロック内にある| html はフィルタと呼ばれテンプレート変数をhtmlに加工するための処理です。このテンプレート変数にcontrollerから値を取得するには[stash]を使用します。 【テンプレートファイル作成のポイント】 ●コントローラクラスからの動的な処理は[% %]ブロックを使用 ●フィルタを使用して加工する[% **|html %] ●テンプレート変数を取得するにはstashを使用 (3)コントローラクラスの作成  次にコントローラクラスにあるhello.pmを開きViewクラスを機能させるサブルーチンを記述します。前述したようにstashメソッドを使用して実行します。  尚、テンプレートファイルの指定はデフォルトでroot/コントローラ名/アクション名.ttになっていますので指定しなくてもよいですが、パスを明示する場合は次のようにコマンドを記述してください。
    $c->stash->{template} = 'Hello/introView.tt';
ではCatalyst controllerクラスにあるhello.pmに次のように記述します。以下のコードでは文字化けが発生したためEncodeパッケージを呼び出してデコード処理しています。
package Hello::Controller::hello;
use Moose;
use namespace::autoclean;
use Encode;

BEGIN { extends 'Catalyst::Controller'; }

=head1 NAME

Hello::Controller::hello - Catalyst Controller

=head1 DESCRIPTION

Catalyst Controller.

=head1 METHODS

=cut


=head2 index

=cut

sub index :Path :Args(0) {
    my ( $self, $c ) = @_;

    $c->response->body('Matched Hello::Controller::hello in hello.');
}


sub HelloWorld :Local {
	my ( $self, $c ) = @_;
	my $name = decode('utf8','こんにちは 世界!!Hello World!!');  #定数
	$c->response->body($name);
}
##以下のサブルーチンを追加####################################
sub introView :Local {
    my ( $self, $c ) = @_;
    #$c->stash->{template} = 'Hello/introView.tt';
    $c->stash->{msg1} =  decode('utf8','Hello World!!');
    $c->stash->{msg2} =  decode('utf8','Cataystテストです。表示すればOK!!');
    $c->stash->{msg3} =  decode('utf8','1.Catalyst Test');
    $c->stash->{msg4} = decode('utf8', 'Hello_server 起動中です。');
    $c->stash->{msg5} =  decode('utf8','2.Catalyst Viewclass');
    $c->stash->{msg6} = decode('utf8', 'View クラスのテストです。表示すればOKです。合格です。');
}
##########################################################
=encoding utf8

=head1 AUTHOR

A clever guy

=head1 LICENSE

This library is free software. You can redistribute it and/or modify
it under the same terms as Perl itself.

=cut

__PACKAGE__->meta->make_immutable;

1;
それでは開発Webサーバを起動してウェブブラウザのアドレスに http://localhost:3000/hello/introView と入力して表示を確認してください。 次のように表示されれば成功です。

Hello World!!

Cataystテストです。表示すればOK!!

1.Catalyst Test

Hello_server 起動中です。

2.Catalyst Viewclass

View クラスのテストです。表示すればOKです。合格です。