OOPでBBSオブジェクト指向プログラミングでフレームワークを使わずに掲示板作成その4。ページングこのエントリーで掲示板の基本完成。Step4Step3で書き込み出来るようになったからログを読み込んで掲示板っぽく表示させるよ!ログもメッセージと同じでModel→Controller→Viewと流す。ログの読み込みCSVだからfgetcsv使う。ソースはマニュアルの例文をちょっと変えて使わせてもらう。true;}Step3のsetPostdataと同じくセッターを使ってメンバ変数に保存。ControllerはreadLogを実行してからgetLogDataで掲示板のログを得る。$modelInstance->getLogData();配列で返されるから$logは当然こうなるんだけど...Viewに渡してからのこと考えると扱い辛い代物だと思う。テンプレートエンジン使わないならWordPressのPostオブジェクトみたいな感じの方がいいよねえ...。ログをオブジェクトにすればフォームにつけたnameをキーとして使えるから分かりやすいし、並び順が変わっても安心。fgetcsvの配列がそのままオブジェクトになればいいのだから、Modelのメンバ変数にあるフォーム要素の名前を使うことができる。オブジェクトにするのに思いついた方法は2つ。新しくクラスを作ってそれのインスタンスにするarray_combineの場合はこんな感じ。$array;型変換したオブジェクトをvar_dumpとかするとobject(stdClass)っていう名前が出る。これはstdClassっていうPHPに内臓されているクラスのインスタンスになるかららしい。配列を型変換する方が簡単だけど、ちょっと試したいこともあることだし後者でやってみることにする。新しくlog.phpを作ってLogというクラスを作る。comment)を受け取る。Step3で作ったControllerから丸投げされた$_POSTを仕分けするsetPostdataメソッドによりフォームから送られた配列は$this->_inputsと同じ順番に並んでいるから、forでループさせるだけでフォーム要素のメンバ変数を全部作ることが出来る。}}ModelクラスのreadLogメソッドをちょっと修正。setLogDataに渡す配列に入れるものをLogクラスのインスタンスにする。😀キーがあると俄然何の値なのか分かりやすい!よーしあとはViewに投げるだけだぞ。Controllerの修正コントローラーにModelから受け取ったログをViewに渡すべく、上で書いたgetLogDataのところをちょっと変更。execute)$viewInstance->setLog($modelInstance->getLogData());渡す時に使うのはセッターだと思うから、Viewに新しくsetLogというメソッドを作ります。Viewの修正Viewに新しく$_logsというメンバ変数を追加。これにControllerを介して渡されたログデータを入れる。$this->_logs;}テンプレートにはLogオブジェクトが入った配列をそのまま渡すので、displayメソッドでゲッターを使う。しているのでArrayという文字列しか出ない。配列にLogオブジェクトが入っているならforeachすればいいよね。😀Wordpressやテンプレートエンジンのタグもこんな感じだよね。テンプレートでもゲッターを通すべきじゃないか?いちいちprintって書くのも面倒くさいし、Wordpressのthe_title()みたいなのがあれば便利そう。Logクラスにそういうメソッドを仕込んでおけば出来るよね。Logクラスの修正Logクラスにテンプレートタグみたいなゲッターを作成する。}}dateだけオプションでフォーマットできるようにしといた。?></p>printやechoまみれになるよりはこっちの方が見やすいと思う。この方法は存在しないキーを指定した時にエラーが出るから、__getを追加しておく。😀ログを表示するところのCSSを適当に書けば掲示板らしさマシマシ。Step5に続きます。ローカルサーバーでテストしてください。KBXAMPPでXdebugを有効にするONにしとくと便利だと思う。コメントデータの処理方法の詳細はこちらをご覧ください。キャンセル投稿を送信できませんでした。メールアドレスを確認してください。メール送信チェックに失敗しました。このブログではメールでの投稿共有はできません。