Catalystでシンプルなアプリケーションの作成
★インストール
#Session cpan install Catalyst::Plugin::Session::Store::File cpan install Catalyst::Plugin::Session::Store::FastMmap cpan install Catalyst::Plugin::Session::State::Cookie cpan install Catalyst::Plugin::Session cpan install Catalyst::Plugin::Session::State::Cookie cpan install Catalyst::Plugin::Session::Store::DBI #DB yum install mysql-devel cpanm DBD::mysql cpan install Catalyst::Model::DBIC::Schema cpan install DBIx::Class::Schema::Loader cpan install MooseX::MarkAsMethods; cpan install MooseX::NonMoose; cpan install Catalyst::Helper::Model::DBI; #View cpan install Catalyst::View::TT; cpan install next;
★基本編
アプリケーションのカレントを作成する
cd /var/www/ catalyst.pl Bookmark
開発サーバーの立ち上げ
env DBIC_TRACE=1 ./script/bookmark_server.pl -r
Controllerの作成
./script/bookmark_create.pl controller login vim /var/www/Bookmark/lib/Bookmark/Controller/login.pm
下記のようにテンプレートを指定する
sub top :Local{ my($self,$c)=@_; $c->stash->{template} = 'login/top.tt'; } sub confirm :Local{ my($self,$c)=@_; $c->stash->{template} = 'login/confirm.tt'; } sub execute :Local{ my($self,$c)=@_; $c->stash->{template} = 'login/execute.tt'; }
Modelの作成(DBIC::Schemaを使用してO/RマッパーによるDBアクセス)
MySQLのテーブルを作り変える度に実行する事!
./script/xxxx_create.pl model OhenroDB2 DBIC::Schema OhenroDB2::Schema create=static dbi:mysql:database=testdb:host=49.212.2.xxx user pass
Controllerの記述方法->
Catalyst::Model::DBIC::Schemaでselect,insert,updateとかのメモ
http://d.hatena.ne.jp/oggata/20120609/1339232476
Modelの作成2(DBIを用いてそのままSQLを実行する。複雑なjoinなどに利用)
./script/xxxx_create.pl model SimpleDB DBI dbi:mysql:database=testdb:host=49.212.2.xxx user pass
Controllerの記述方法->
sub dbi :Local{ my($self,$c)=@_; my $db = $c->model('Catal')->dbh; $db->do('set names utf8'); my $stt = $db->prepare('select * from book order by published desc'); $stt->execute(); my @data = (); while(my $row=$stt->fetchrow_hashref()){ push @data,$row; } $c->stash->{list}=\@data; $c->stash->{template}='list.tt'; }
Viewの作成
./script/bookmark_create.pl view TT TT mkdir /var/www/Bookmark/root/login vim /var/www/Bookmark/root/login/top.tt vim /var/www/Bookmark/root/login/confirm.tt vim /var/www/Bookmark/root/login/execute.tt
TT(テンプレートツールキット)の設定ファイルに追記※これを追記しないとTTを相対パスで指定できない
vim /var/www/Bookmark/lib/Bookmark/View/TT.pm __PACKAGE__->config( TEMPLATE_EXTENSION => '.tt', render_die => 1, RELATIVE => 1, ABSOLUTE => 1, );
★セッション編(FastMmap+Cookieの組み合わせの場合)--------------------------------------------------------
[Server]
Store::File セッションをファイルに保存
Store::FastMmap セッションをメモリマップファイルに保存
Store::Memcached セッションをmemcachedに保存
Store::DBIC セッションをDBIx::Class対応DBに保存
Store::DBI セッションをDBI対応DBに保存
[Client]
Store::Cookie セッションIDのやりとりにクッキーを使用する
Store::URI セッションのやりとりにURIを使用
Store::Stash セッションのやりとりにStashを使用
#/[app名]/lib/[app名].pm
use Catalyst qw/ -Debug ConfigLoader Static::Simple Session Session::State::Cookie Session::Store::FastMmap / __PACKAGE__->config( session => { expires => 1000, storage => '/tmp/session' }, );
★セッション編(DBI+Cookieの組み合わせの場合)--------------------------------------------------------
http://search.cpan.org/~flora/Catalyst-Plugin-Session-Store-DBI-0.16/lib/Catalyst/Plugin/Session/Store/DBI.pm
http://search.cpan.org/~flora/Catalyst-Plugin-Session-Store-DBIC-0.12/lib/Catalyst/Plugin/Session/Store/DBIC.pm
#MySQLにセッション管理用のテーブルを作成
CREATE TABLE sessions ( id char(72) primary key, session_data text, expires int(10) );
#/[app名]/lib/[app名].pmを下記のように追記する
use Catalyst qw/ -Debug ConfigLoader Static::Simple Session Session::State::Cookie Session::Store::DBI /; __PACKAGE__->config( name => 'Bookmark', # Disable deprecated behavior needed by old applications disable_component_resolution_regex_fallback => 1, enable_catalyst_header => 1, # Send X-Catalyst header #session => { # expires => 1000, # storage => '/tmp/session' #}, 'Plugin::Session' => { expires => 3600, dbi_dsn => 'dbi:mysql:database=testdb:host=49.212.2.106', dbi_user => 'userid', dbi_pass => 'password', dbi_table => 'sessions', dbi_id_field => 'id', dbi_data_field => 'session_data', dbi_expires_field => 'expires', } );
#Controller側では普通に使う
#セッションを保存 $c->session->{session_name}='testtest'; #セッションを呼出し my $session_name = $c->session->{session_name};
セッションとDBを連携したりする
use base 'DBIx::Class::Schema'; sub top :Local{ my($self,$c)=@_; $c->stash->{template} = 'login/top.tt'; } sub confirm :Local{ my($self,$c)=@_; #session $c->session->{login_id} = $c->request->body_params->{'login_id'}; $c->session->{login_passwd} = $c->request->body_params->{'login_passwd'}; #view $c->stash->{template} = 'login/confirm.tt'; $c->stash->{login_id} = $c->request->body_params->{'login_id'}; $c->stash->{login_passwd} = $c->request->body_params->{'login_passwd'}; } sub execute :Local{ my($self,$c)=@_; #session my $login_id = $c->session->{login_id}; my $login_passwd = $c->session->{login_passwd}; #DB insert my $row = $c->model('MyDB2::Member')->create({ name => $login_id, password => $login_passwd, last_update_date => \'NOW()' }); #view $c->stash->{template} = 'login/execute.tt'; $c->stash->{login_id} = $login_id; $c->stash->{login_passwd} = $login_passwd; }