OOPでBBSオブジェクト指向プログラミングでフレームワークを使わずに掲示板作成その5。ページングStep4までで読み書きできるようになった掲示板。いくつか気になる点が出てきたので今のうちに解決しておくことにする。メッセージの変更メッセージが黒いままじゃぱっと見なんのメッセージなのか分かりづらいから、エラーは赤!成功なら緑!みたいに色分けをしたい。色分け自体はCSSですればいいけど、CSSならクラスやstyle属性が必要になってくる。そこでエラーと分けていたメッセージのセッターを次のように変更した。'text'=>$text);}$_systemMessageを連想配列にして、メッセージの種類を一緒に保存しておくようにする。これに合わせてコントローラーのセッターも変更。成功ならsuccess、エラーならerrorという引数を渡すようにする。$modelInstance->getError());//エラーgetSystemMessageメソッドはキーを指定してメッセージだけ返すようにする。$this->_systemMessage['text'];}最後にViewのdisplayメソッドを修正する。'</p>';}$_systemMessage[‘type’]をそのままクラス名として使う。前に書いたCookieを使うサンプルを使って2重送信を防止しておく。トークンはコントローラーで作って、POST送信されたときにチェック。出力に$tokenという変数を使うことにしてテンプレートにhidden要素を書いておく。/>コントローラーにトークンを作るメソッドを追加。substr(sha1(uniqid().mt_rand()),-13,10);}それからexecuteメソッドの中にある条件分岐にトークンのチェックとクッキーへの書き込みを加える。}}}//省略//$viewInstance->setToken($this->createToken());//Viewにトークンを渡すビューへのセットはdisplayメソッドに引数として渡すかどうかで迷ったけど、セッター&ゲッターを使うことにしました。$this->_token;}displayメソッドでテンプレートに渡す$tokenにトークンをセットすれば2重送信防止が出来るようになる。気になってたところは直したけどまだ何かが足りない。...そうです設定ファイルです。ディレクトリ名とかは設定ファイルを使っといた方がよりアプリケーションらしさが増すというもの。ある設定ファイル配布されているスクリプトを見たりしているとパターンがいくつかある事が分かる。どれも一長一短ありますが今回は4のiniファイルを使うことにした。テキストファイルに独自の形式で書いてある設定項目が各PHPファイルの上部にそのファイル内で必要なものだけ書いてある共通して読み込む設定ファイルに定数や変数が書いてある(ZeroMailとかがこれ)iniファイル(php.iniでおなじみ)データベース(CMSはこれ)ZeroMailと同じように定数メインの設定ファイルを作るのが一番楽だと思う。iniファイルはparse_ini_file関数を使う手間がひとつ余計に必要になるけど、key=valueという書式だからファイル関数使うものの中では設定保存が実装しやすい。ブラウザから設定変更をするつもりなら1,4,5、そうでないなら2,3。bbs.iniの作成ModelとViewにある設定をiniファイルに移します。notEmpty入力項目と一緒にバリデーションの設定もiniファイルにお引越し。バリデーションキーはCakePHPを真似るとします。それから設定を読み込んだりするクラスを新たに追加。}}parse_ini_fileの戻り値はクラスのプロパティにしまっておく。フォームの設定だけ専用のゲッターを作って配列で返すようにした。コントローラーの変更Configクラスのインスタンスをコントローラーで作成する。作ったインスタンスはModelとViewのコンストラクタに渡します。$modelInstance->setLogfileName($config->get('logfile_name'));//ログファイルをセットViewの変更クラス定数をコメントアウトして、代わりにテンプレートディレクトリ用のプロパティを増やす。コンストラクタの引数に$configを入れてからgetメソッドを使って設定を取り出す。NULL;}テンプレート名のゲッターで使っていた定数をプロパティに変える。$this->_templateName;}Modelの変更Viewと同じくModelのコンストラクタとファイル名に関するメソッドを修正。iniファイルに設定されたバリデーションルールを入れるプロパティを追加。バリデーションはとりあえずこんな感じで~。掲示板はそれほど種類を使わないだろうから、とりあえずnotEmpty、alphaNumeric、email、urlを設定しておいた。$label.'は半角英数字のみ使用できます。$label.'の書式に誤りがあります。$label.'の書式に誤りがあります。設定ファイルをブラウザから変更するっていう場合にはConfigクラスに書き込むロジックを追加すれば対応出来ます。今の所はないけど、例えば管理者機能を追加する時にはパスワードの設定とかで必要になってくると思うので。ローカルサーバーでテストしてください。コメントデータの処理方法の詳細はこちらをご覧ください。キャンセル投稿を送信できませんでした。メールアドレスを確認してください。メール送信チェックに失敗しました。このブログではメールでの投稿共有はできません。