Catalyst-Plugin-CRUD (2)

インストール方法

  • 最初に DBDesginer4 をインストールします
    • Windows版、Linux版どちらでもかまいませんが、Windows版しか検証していません・・
  • 次に Catalyst::Plugin::CRUD をインストールします
$ su -
# cpan Catalyst::Plugin::CRUD
  • DBDesginer4 でなにか適当なモデルを作ります



  • プライマリーキー id を追加します
    • オートインクリメントにしたほうがよいでしょう
  • 削除用カラム disable を追加します
    • デフォルト値を 0 にします
    • Catalyst::Plugin::CRUD は削除時に disable を 1 にします
    • これにより事故でお客さんがデータを消してしまったときに undelete できます
    • 一覧参照では disable = 0 のものだけ表示します
    • 本当にレコードを delete したいときは削除後のコールバック関数で delete してください
  • モデルとテーブルのコメントに表示用の名前を入れます(これが重要)
  • ファイル名はとりあえず tinyurl.xml にしておきます
  • Catalyst アプリケーションの雛形を作ります
$ catalyst.pl TinyURL
  • さっき作ったモデル定義ファイルをコピーします
$ cd TinyURL
$ mkdir sql
$ cp /somewhere/tinyurl.xml sql

DBIx::Class を使う場合

$ cd TinyURL/script
$ ./tinyurl_create.pl model DBIC CRUD ../sql/tinyurl.xml

以下のようなファイルができます。

TinyURL/root/favicon.ico
TinyURL/root/static/images/btn_88x31_powered.png
TinyURL/root/static/images/btn_120x50_built_shadow.png
TinyURL/root/static/images/btn_120x50_powered.png
TinyURL/root/static/images/btn_88x31_powered_shadow.png
TinyURL/root/static/images/btn_120x50_powered_shadow.png
TinyURL/root/static/images/catalyst_logo.png
TinyURL/root/static/images/btn_88x31_built.png
TinyURL/root/static/images/btn_120x50_built.png
TinyURL/root/static/images/btn_88x31_built_shadow.png
TinyURL/root/template/tinyurl/list.tt
TinyURL/root/template/tinyurl/list.cs
TinyURL/root/template/tinyurl/read.tt
TinyURL/root/template/tinyurl/create.cs
TinyURL/root/template/tinyurl/create.tt
TinyURL/root/template/tinyurl/update.tt
TinyURL/root/template/tinyurl/update.cs
TinyURL/root/template/tinyurl/read.cs
TinyURL/root/template/header.cs
TinyURL/root/template/header.tt
TinyURL/root/template/footer.tt
TinyURL/root/template/footer.cs
TinyURL/script/tinyurl_fastcgi.pl
TinyURL/script/tinyurl_create.pl
TinyURL/script/tinyurl_test.pl
TinyURL/script/tinyurl_server.pl
TinyURL/script/tinyurl_cgi.pl
TinyURL/tinyurl.yml
TinyURL/t/01app.t
TinyURL/t/02pod.t
TinyURL/t/03podcoverage.t
TinyURL/t/model_DBIC.t
TinyURL/sql/schema/tiny_url.sql
TinyURL/sql/tinyurl.xml
TinyURL/Changes
TinyURL/README
TinyURL/Makefile.PL
TinyURL/lib/TinyURL/I18N/en.po
TinyURL/lib/TinyURL/I18N/ja.po
TinyURL/lib/TinyURL/Controller/Root.pm
TinyURL/lib/TinyURL/Controller/TinyUrl.pm
TinyURL/lib/TinyURL.pm
  • データベースを作ります
$ createdb tinyurl
$ cd TinyURL/script
$ psql tinyurl < ../sql/tiny_url.sql
  • 次のようにしてモデルを作ります
$ cd TinyURL/script
$ ./tinyurl_create.pl model DBIC DBIC::Schema TinyURL::Schema \
create=dynamic "dbi:Pg:dbname=tinyurl;host=localhost;" username password
  • いったん起動してみます
$ cd TinyURL/script
$ ./tinyurl_server.pl
  • こんなメッセージが出れば成功です
[debug] Debug messages enabled
[debug] Loaded plugins:
.----------------------------------------------------------------------------.
| Catalyst::Plugin::ConfigLoader  0.14                                       |
| Catalyst::Plugin::Static::Simple  0.16                                     |
'----------------------------------------------------------------------------'

[debug] Loaded dispatcher "Catalyst::Dispatcher"
[debug] Loaded engine "Catalyst::Engine::HTTP"
[debug] Found home "/home/foobar/TinyURL"
[debug] Loaded Config "/home/foobar/TinyURL/tinyurl.yml"
[debug] Loaded components:
.-----------------------------------------------------------------+----------.
| Class                                                           | Type     |
+-----------------------------------------------------------------+----------+
| TinyURL::Controller::Root                                       | instance |
| TinyURL::Controller::TinyUrl                                    | instance |
| TinyURL::Model::DBIC                                            | instance |
| TinyURL::Model::DBIC::TinyUrl                                   | class    |
'-----------------------------------------------------------------+----------'

[debug] Loaded Private actions:
.----------------------+--------------------------------------+--------------.
| Private              | Class                                | Method       |
+----------------------+--------------------------------------+--------------+
| /default             | TinyURL::Controller::Root            | default      |
| /end                 | TinyURL::Controller::Root            | end          |
| /tinyurl/create      | TinyURL::Controller::TinyUrl         | create       |
| /tinyurl/default     | TinyURL::Controller::TinyUrl         | default      |
| /tinyurl/read        | TinyURL::Controller::TinyUrl         | read         |
| /tinyurl/delete      | TinyURL::Controller::TinyUrl         | delete       |
| /tinyurl/update      | TinyURL::Controller::TinyUrl         | update       |
| /tinyurl/list        | TinyURL::Controller::TinyUrl         | list         |
'----------------------+--------------------------------------+--------------'

[debug] Loaded Path actions:
.-------------------------------------+--------------------------------------.
| Path                                | Private                              |
+-------------------------------------+--------------------------------------+
| /tinyurl/create                     | /tinyurl/create                      |
| /tinyurl/delete                     | /tinyurl/delete                      |
| /tinyurl/list                       | /tinyurl/list                        |
| /tinyurl/read                       | /tinyurl/read                        |
| /tinyurl/update                     | /tinyurl/update                      |
'-------------------------------------+--------------------------------------'

[info] TinyURL powered by Catalyst 5.7007
You can connect to your server at http://localhost:3000

Class::DBI を使う場合

最初がちょっと違うだけで、DBIx::Class とほとんど同じです。

$ cd TinyURL/script
$ ./tinyurl_create.pl model CDBI CRUD ../sql/tinyurl.xml
  • 次のようにしてモデルを作ります
$ cd TinyURL/script
$ ./tinyurl_create.pl model CDBI CDBI \
"dbi:Pg:dbname=tinyurl;host=localhost;" username password '{AutoCommit => 1}'
use Class::DBI::AbstractSearch;