Object Oriented Perl DocumentWorkSpace

 Object Oriented Perl DocumentWorkSpace>>


<<CONTACT>>

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

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

 



V.Perl Catalyst PROGAMMING

1.Catalyst MVCモデル Model

この章では実際にMVCモデルのモデルクラスとデータベースのSQLiteを使用してデータベースのデータを表示するモデルクラスの開発を進めていきます。モデルはデータベースのアクセスや操作を行うクラス前回controllerのみを使用したプログラムを作成しましたが、そのコントローラを使用して作成を進めていきます。

(1) データベース作成

今回、データベースには軽量でテキストエディタとコマンドブロンプトで開発を進められる使いやすい一般的なデータベースであるSQLite(http://www.sqlite.org)を使用します。データベーステーブルを作成しサンプルデータを読み込みます。エディタで新規ファイルを作成して開き、次のように入力して名称はcataldb.sqlで保存します。
--
-- Create a very simple database to hold book and author information
--
PRAGMA foreign_keys = ON;
CREATE TABLE book (
        id          INTEGER PRIMARY KEY,
        title       TEXT ,
	review       TEXT ,
        rating      INTEGER,
	price 		INTEGER,
	published	BLOB
);
-- 'book_author' is a many-to-many join table between books & authors
CREATE TABLE book_author (
        book_id     INTEGER REFERENCES book(id) ON DELETE CASCADE ON UPDATE CASCADE,
        author_id   INTEGER REFERENCES author(id) ON DELETE CASCADE ON UPDATE CASCADE,
        PRIMARY KEY (book_id, author_id)
);
CREATE TABLE author (
        id          INTEGER PRIMARY KEY,
        first_name  TEXT,
        last_name   TEXT
);
---
--- Load some sample data
---
INSERT INTO book VALUES (1, 'CCSP SNRS Exam Certification Guide','Very Good',5,5000,'2010-10-1');
INSERT INTO book VALUES (2, 'TCP/IP Illustrated, Volume 1','Very Good', 5,1200,'2009-10-1');
INSERT INTO book VALUES (3, 'Internetworking with TCP/IP Vol.1','Good', 4,2200,'2008-5-5');
INSERT INTO book VALUES (4, 'Perl Cookbook','Good', 5,800,'2014-2-5');
INSERT INTO book VALUES (5, 'Designing with Web Standards','Very Good',5,3200,'2011-6-7');
INSERT INTO author VALUES (1, 'Greg', 'Bastien');
INSERT INTO author VALUES (2, 'Sara', 'Nasseh');
INSERT INTO author VALUES (3, 'Christian', 'Degu');
INSERT INTO author VALUES (4, 'Richard', 'Stevens');
INSERT INTO author VALUES (5, 'Douglas', 'Comer');
INSERT INTO author VALUES (6, 'Tom', 'Christiansen');
INSERT INTO author VALUES (7, 'Nathan', 'Torkington');
INSERT INTO author VALUES (8, 'Jeffrey', 'Zeldman');
INSERT INTO book_author VALUES (1, 1);
INSERT INTO book_author VALUES (1, 2);
INSERT INTO book_author VALUES (1, 3);
INSERT INTO book_author VALUES (2, 4);
INSERT INTO book_author VALUES (3, 5);
INSERT INTO book_author VALUES (4, 6);
INSERT INTO book_author VALUES (4, 7);
INSERT INTO book_author VALUES (5, 8);
保存したクエリをデータベースに取り込み、データベースを作成します。コマンドブロンプトを開きチェンジディレクトリでSqliteフォルダに移動してsqlite3を開きます。SQliteアプリケーションに接続したことを確認し[SQlite3]コマンドを入力して次のコマンドを入力してデータベースファイルを作成します。
$ sqlite3 cataldb.db < cataldb.sql
データベースが作成されたことを確認したら、データベースの確認を行います。次のコマンドでデータベーステーブルの確認を行ってください。
sqlite> .open cataldb.db
sqlite> .table
authors  book_authors  books
sqlite> .table
sqlite> select * from books;
1|CCSP SNRS Exam Certification Guide|5
2|TCP/IP Illustrated, Volume 1|5
3|Internetworking with TCP/IP Vol.1|4
4|Perl Cookbook|5
5|Designing with Web Standards|5
データベースの中身を確認したら[ctrlキー+C]を押しSQliteを閉じます。作成した[データベース名.db]はCatalystプロジェクトの[script]フォルダにコピーをして設置します。今回は[C:\data2\Hello\script]フォルダに設置をします。

(2) コントローラクラスモジュール作成

 プロジェクトは前回から引き続き[Hello]プロジェクトを使用しますが、今回は新規にコントローラクラスモジュール[request]を作成します。次のコマンドを入力してコントローラモジュールの作成を行ってください。
C:\data\Hello\script>hello_create.pl controller request
 exists "C:\data\Hello\lib\Hello\Controller"
 exists "C:\data\Hello\t"
created "C:\data\Hello\lib\Hello\Controller\request.pm"
created "C:\data\Hello\t\controller_request.t"

C:\data\Hello\script>
これでコントローラクラスが作成されました。ではコントローラクラスを開き次のプログラムを入力してください。
sub list :Local {
   my ( $self, $c ) = @_;
    $c->stash->{list1}=[$c->model('CatalDB::Book')->all];
    $c->stash->{list2}=[$c->model('CatalDB::BookAuthor')->all];
    $c->stash->{list3}=[$c->model('CatalDB::Author')->all];
}

2.Modelクラスの作成

(1) DBI DBIxモジュール

 次にModelクラスの作成に入りますが、その前にPerlからデータベースにアクセスするためのモジュールであるDBIの説明をします。Perlからデータベースにアクセスするための手段として利用しているのがこのDBIモジュールであり、Catalystでは、Perlを介して利用可能なあらゆる形式のデータストアで事実上使用できます。たとえば、Catalyst :: Model :: DBIを使用して従来のPerl DBIインタフェースを介してデータベースにアクセスしたり、モデルを使用してファイルシステム上の任意のタイプのファイルにアクセスすることができます。  またDBIx :: Classはアプリケーションデータベース構造を自動的に読み取るモードをサポートしており、ヘルパー機能を使用してデータベース構造をオブジェクト形式に自動的に変換してくれます。Catalyst::Model::DBIC::SchemeにはこのDBIx::ClassライブラリをCatalystから利用するためのコンポーネントです。

(2) モデルクラス作成

では実際にモデルクラスのモジュールを作成します。Viewクラスを作成したときと同様に次の[hello_create.pl]から作成します。
hello_create.pl モデル名 データベース名 スキーマクラス名
スキーマークラスはデータベーススキーマを作成するために使用されます。DBIx :: Class :: Schema :: Loaderを使用してデータベースを読み込み必要なファイルを自動的にビルドします。スキーマクラスでは次のコマンドを指定します。 ●DBlib/MyApp/Model:ディレクトリ内のヘルパーによって作成されるモデルクラスの名前です。 ●DBIC::Schema:作成するモデルのタイプです。これは、Catalystの中でDBICベースのモデルを使用する標準的な方法であるCatalyst :: Model :: DBIC :: Schemaに相当します。 ●MyApp::Schema:書き込まれるDBICスキーマファイルの名前ですlib/MyApp/Schema.pm。 ●create=static:原因DBIx ::クラス::スキーマ::ローダーを、それが実行され、その後にその情報を書き出すようスキーマをロードするlib/MyApp/Schema.pmと、下のファイルlib/MyApp/Schemaのディレクトリ。 ●dbi:SQLite:myapp.db SQLiteで使用する標準のDBI接続文字列です。 ●on_connect_doh:DBIx :: Class :: Schema :: Loaderが私たちのために外部キー関係を作成することを文字列で要求します。
では実際にモデルクラスを作成するコマンドを入力します。
C:\data2\Hello\script>hello_create.pl model CatalDB DBIC::Schema Hello::Schema c
reate=static dbi:SQLite:cataldb.db on_connect_do="PRAGMA foreign_keys = ON"
 exists "C:\data2\Hello\lib\Hello\Model"
 exists "C:\data2\Hello\t"
Dumping manual schema for Hello::Schema to directory C:\data2\Hello\lib ...
Schema dump completed.
 exists "C:\data2\Hello\lib\Hello\Model\CatalDB.pm"
created "C:\data2\Hello\lib\Hello\Model\CatalDB.pm.new"
 exists "C:\data2\Hello\t\model_CatalDB.t"
C:\data\Catal\lib\Catal\Schema\Resultにデータベーススキーマファイルが作成されていればデータベースへのアクセスが成功していることがわかります。

3.テンプレートファイル作成

 Viewクラスは前回作成したものを使用します。ここではデータベースを表示するテンプレートファイルを作成します。ファイル名はコントローラクラスのアクションメソッドで今回は[list.tt]とします。ファイルはプロジェクトファイル/rootフォルダの直下に配置します。Template Toolkitドキュメントhttp://template-toolkit.org/
[list.ttファイル]
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="stylesheet.css" >
<meta charset="UTF-8">
<title>モデルの基本</title>
</head>
<body>
<table border="1">
<tr>
<th>書籍ID</th><th>書籍名</th><th>レーティング</th>
</tr>
[% FOREACH item = list %]
<tr>
<th>[% item.id %]</th>
<th>[% item.name %]</td>
<th>[% item.rating %]</td>
</tr>
</table>
</body>
</html>
 最後に開発Webサーバを起動してウェブブラウザのアドレスに http://localhost:3000/hello/list と入力して表示を確認してください。 Sqliteデータベーステーブルの内容が表示されれば成功です。