WAFLWAFL::Manual::JA::WAFL - CRUD ジェネレータ
CRUDに必要なコントローラ/ディスパッチャ/ビューを自動生成します。 サンプルテンプレートはWAF毎に分かれており 以下のテンプレートを用意してあります。
1:Catalyst
2:Mojolicious
3:Amon2
create => /<table>/create
edit => /<table>/edit/<id>
delete => /<table>/delete/<id>
list => /<table>/list
実際に使ってみます。 WAFはAmon2で。
1.インストール
cpanm https://github.com/toritori0318/p5-WAFLWAFL/tarball/master
2.アプリケーションルートに移動します。
サンプルのスキーマは以下のような感じ。
package ApiSample::DB::Schema;
use DBIx::Skinny::Schema;
########################################
# schema
install_table emp => schema {
pk qw/empno/;
columns qw/empno ename job mgr hiredate sal comm deptno/;
};
install_table dept => schema {
pk qw/deptno/;
columns qw/deptno dname loc/;
};
1;
3.以下のようなコンフィグファイルを用意します (wafl.pl)。
サンプルはこちらにあります(https://github.com/toritori0318/p5-WAFLWAFL/tree/master/eg)
use File::Spec;
my $app = 'ApiSample';
+{
'APP' => $app, # アプリケーション名
'OUTPUT' => 'crudsample-amon', # 出力先ディレクトリ名
'ORM' => {
# ORMの指定(Skinny / DBIC)
module => 'Skinny',
# スキーマクラスの指定
schema_class => 'ApiSample::DB',
},
# exampleの指定 (catalyst / mojolicious / amon)
'SRC_EXAMPLE' => 'amon',
'WAF' => {
Dispatcher => {
# ディスパッチャファイル名
file => File::Spec->catfile('lib', $app, 'Web', "Dispatcher.pm.sample"),
},
Controller => {
# コントローラディレクトリ名
dir => File::Spec->catfile('lib', $app, 'Web', 'C'),
},
View => {
# ビューディレクトリ名
dir => "tmpl",
# テンプレート拡張子
ext => ".tt",
},
},
};
4.テンプレートを生成してみます
$ wafl run
5.以下のようなディレクトリが作成されます
$ tree crudsample-amon
crudsample-amon
|-- lib
| `-- ApiSample
| `-- Web
| |-- C
| | |-- Dept.pm
| | `-- Emp.pm
| `-- Dispatcher.pm.sample
`-- tmpl
|-- dept
| |-- create.tt
| |-- delete.tt
| |-- edit.tt
| `-- list.tt
`-- emp
|-- create.tt
|-- delete.tt
|-- edit.tt
`-- list.tt
6.crudsample-amon/tmpl/dept/list.tt を見てみましょう。
<a href="[% uri_for('/dept/create') %]">create</a>
<table border=1>
<tbody>
<tr>
<th>deptno</th>
<th>dname</th>
<th>loc</th>
<th> edit </th>
<th> delete </th>
</tr>
[% FOR row IN dept %]
<tr>
<td> [% row.deptno %] </td>
<td> [% row.dname %] </td>
<td> [% row.loc %] </td>
<td> <a href="[% uri_for('/dept/edit/' _ row.deptno) %]">edit</a> </td>
<td> <a href="[% uri_for('/dept/delete/' _ row.deptno) %]">delete</a> </td>
</tr>
[% END %]
</tbody>
</table>
こんな感じ。
では次に、自分用のカスタマイズテンプレートを作ってみます。
1.テンプレートをGET
$ wafl get -w amon
get template to ./wafl-template
2.wafl-template/list.tx の1−2行目に以下を追加してみます
[% INCLUDE 'header.tt' %]
CUSTOMIZE!!!!
3.wafl.pl の 「SRC_EXAMPLE」 を削除して以下を追加します
SRC => 'wafl-template',
4.テンプレートを生成してみます
$ wafl run
5.crudsample-amon/tmpl/dept/list.tt を見てみましょう。
[% INCLUDE 'header.tt' %]
CUSTOMIZE!!!!
<a href="[% uri_for('/dept/create') %]">create</a>
<table border=1>
<tbody>
<tr>
<th>deptno</th>
<th>dname</th>
<th>loc</th>
<th> edit </th>
<th> delete </th>
</tr>
[% FOR row IN dept %]
<tr>
<td> [% row.deptno %] </td>
<td> [% row.dname %] </td>
<td> [% row.loc %] </td>
<td> <a href="[% uri_for('/dept/edit/' _ row.deptno) %]">edit</a> </td>
<td> <a href="[% uri_for('/dept/delete/' _ row.deptno) %]">delete</a> </td>
</tr>
[% END %]
</tbody>
</table>
カスタマイズした箇所が追加されていますね!