Skip to content

Latest commit

 

History

History
206 lines (151 loc) · 4.96 KB

WAFL.pod

File metadata and controls

206 lines (151 loc) · 4.96 KB

NAME

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

Example

実際に使ってみます。 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>

こんな感じ。

Customize Example

では次に、自分用のカスタマイズテンプレートを作ってみます。

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>

カスタマイズした箇所が追加されていますね!