Mapleを利用した掲示板作成?
11月から入社した小沼です。現在研修中でPHPの勉強をしています。
先週ぐらいから、PHPのフレームワークであるMapleを利用し、掲示板を作成しています。
ある程度まで動作するようになったので、そこで得たノウハウなどをここに記述していきます。
なおシステム構成など設計情報はこちらに記述してあります。
- アークウェブ プロジェクト管理方法ご紹介/3?
目次 †
Mapleのインストールについて †
インストール方法 †
インストールの方法は以下の2種類があります。詳細はリンク先を参照してください。
テンプレートエンジンが必要 †
インストールを行うためには、テンプレートエンジンのSmartyかHTML_Template_Flexyが必要です。どちらかがインストールされていないと、Mapleが動作しないどころか、Mapleのインストールすらできません。
開発 †
Mapleコマンド †
Mapleの開発においてはMapleコマンドを使用します。
$maple webapp $maple action ...
といった形です。実行すると、雛形となるファイルが生成されます。
生成されたファイルに対して開発者が変更を加えていきます。
Ruby On Railsにおけるrailsコマンドみたいなものだと思います。
画面とアクション間でのデータの受け渡し方法について †
テンプレート(画面)からアクションクラス(moduleディレクトリ以下にできるクラス)のメンバ変数にアクセスすることができます。
アクションクラスに以下のような記述をおこなうと、
class Hoge { var $val1; function execute(){ return 'success'; } }
テンプレート画面からは以下のように記述することで、値を取得できます。
<input type="text" name="" value="{$action.val1}">
逆に、画面でサブミットした値をアクションクラスで取得するためには、テンプレート画面に以下のように記述します。
<input type="text" name="val1" value="">
すると、アクションクラスのval1というメンバ変数に、サブミットされた値が設定されます。
アクションチェーンについて †
アクションチェーンというのは複数のアクションを連続して実行することです。
例えば、今回作った掲示板では、新規投稿を行ったときに以下の二つのアクションをチェーンさせています。
- submit(投稿されたデータをDBに登録するアクション)
- display(DBに登録されているデータを表示するアクション)
方法としては、チェーン元のアクションの遷移先に、チェーン先のアクションを設定するだけです。
今回作った例では、submitアクションと同階層にあるmaple.iniを以下のように記述するだけです。
[View] success = "action:display
以前どこかでアクションチェーンはあまり使用しないほうがいいという記述を呼んだ記憶があります(確かStrutsインアクション)。理由としては、
- アクションをチェーンさせたくなるのは、アクションにロジックが記述されてあるから。
- そのため重複したコードを書かないために、アクションをチェーンさせる。
- ロジックが適切にモジュール化されていれば、アクションをチェーンさせなくても、一つのアクション内で複数のロジックを呼び出すことで、重複するコードを書かなくても対応できるはず。
ということだったと思います。
個人的にはアクションチェーンが有効な場合もあると思います。しかし上のような観点もあるということで、チェーンで実装する前に、本当にそうするのが最善か、ロジックが適切に分割できていないのではないか、ということをもう一度検討した方がいいかもしれません。
※個人的なことですが、私はアクションチェーンを実装している最中以下のエラーに苦しみました。
Cannot redeclare class db
「DBクラスを再定義できません」ということでしょうか。
結局require('DB.php')とやっている箇所をrequire_once('DB.php')とすることで直りました。
アクションチェーンを使ったことで、一回の動作の中で2回require('DB.php')がおこなわれるようになったことが原因と思われます。
requrieの存在価値がいまいち分かりません。外部ライブラリが必要になったら常にrequire_onceしたほうが安全じゃないでしょうか?
入力チェックについて †
入力項目に対しておこなうチェックもmaple.iniに記述します。
今回の掲示板では新規投稿時に、必須チェックを行うように設定しました。
maple.iniの内容です。
[Validate] name.required = "1,name is required" message.required = "1, message is required"
nameやmessageと書かれているところが、入力チェック対象の項目です。これは画面上入力項目のname属性と対応します。
次のrequiredと書かれているのが、チェック方法です。requiredの他に、maxLengthやdateなどがあります。
1と書かれているところはストッパーです。1のほかに0が指定できます。ストッパーが1になっている入力チェックに引っかかった場合、以降のその項目に対する入力チェックをおこないません。
name is requiredとなっているところはエラーメッセージです。
エラーメッセージは以下のように記述することで、画面に表示させることができます。
{errorList->getMessages assign=messages} {foreach from=$messages|smarty:nodefaults item=message} <font color="#ff0000">{$message}</font><br> {/foreach}
入力チェックについての詳細はここを参照してください。
必須チェック以外にもmaxlenghtのチェックなどいろいろあるようです。またValidateアクションを拡張することで、新しい入力チェックをカスタマイズすることもできるようです。