phpフレームワーク自作2
フレームワークを使ったアプリケーションの設計
フレームワークを説明するに当たって、実際にアプリケーションを製作したもので説明していきたいと思います。
フレームワークのコアな部分はプログラムを動かす最低限のものに抑えることと、アプリケーション本体部分をフレームワークに沿ってコーディングするための約束事は最小限に抑えることという方針の下に製作していくことにしました。
また、個人レベルでの製作を念頭においているので、作業を細かく分割して進めていくことを想定せず、中大規模プロジェクトには向いていないことをご了解していただくおもいます。
製作アプリケーションの概要は以下のようになっております。
アプリケーション名
news3
システム構築の形
何を作るのか
- ホームページに更新ニュースページを作る。
それを作ることにより実現できるもの
- 同一ドメイン内で更新があった内容を知らせることが出来る。
- また、そのページへのリンクからそのページに飛ぶことが出来る。
- pcまたはスマートフォンから更新があった情報を登録し、ページに反映することが出来る。、
必要な機能
- 情報を登録するデータベース処理機能
- デザインとロジックを分離することが出来るテンプレートエンジン
- 情報を登録、更新、停止できる処理機能
- それらを操作するユーザ登録機能
- 管理機能を操作できるようにするための認証機能
- セッション
- セキュリティ
- ロジックエラー報告
システム環境(開発側)
- windows7pro
- xampp Version 7.1.8
- PHP Version 7.3.7
- Apache/2.4.39
- sqlite3.15.1
- 10.1.26-MariaDB
- phpunit7.6.2
- dbunit4.0.0
システム環境(運用側)
アウトプット設計
* イメージが下記のとおりにならないことがあるので、ご了解ください。
クライアントに出力する、画面を作ります。出力処理はテンプレートエンジンであるsmartyを使っています。但し、例外処理による画面出力は、フレームワーク内のレンダリング処理を使って出力しています。
画面設計
画面フロー
更新情報画面
ログイン画面
機能選択画面
投稿画面
詳細リンク登録画面
画像アップロード画面
投稿非表示設定画面
ログイン情報追加画面
画像idとファイル名対応表画面
例外エラー画面
フレームワーク内でのレンダリング処理にて表示
データベース設計
データベース名(sqlite)
-
- news3test.sq3
- テーブル定義
-
- cat カテゴリ
- cat_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT
- cat_name TEXT NOT NULL
- certifi 認証情報
- ce_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT
- ce_name TEXT NOT NULL UNIQUE
- ce_pword TEXT NOT NULL UNIQUE
- contact コンタクトフォーム情報(ここでは不使用)
- id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT
- nm TEXT NOT NULL
- con_method INTEGER NOT NULL
- addr TEXT NOT NULL
- title INTEGER NOT NULL UNIQUE
- comment TEXT NOT NULL
- date TEXT NOT NULL
- ip TEXT NOT NULL
- dt 投稿データ
- id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT
- cat_id INTEGER NOT NULL
- title TEXT NOT NULL UNIQUE
- contents TEXT
- img_id INTEGER
- link_dir_id INTEGER
- link_fname TEXT
- date TEXT
- dtstop_flg INTEGER
- link_dir 詳細リンクディレクトリ
- dir_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT
- dir_path TEXT NOT NULL
- myimg 画像情報
- img_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT
- filename TEXT NOT NULL UNIQUE
- alt TEXT NOT NULL
- comment TEXT NOT NULL
- ext INTEGER NOT NULL
- cat INTEGER NOT NULL
- date TEXT NOT NULL
- mymap 地図掲載情報(ここでは不使用)
- id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT
- nm TEXT NOT NULL
- lat TEXT NOT NULL
- lng TEXT NOT NULL
- icon INTEGER NOT NULL
- title TEXT NOT NULL UNIQUE
- map_dt TEXT NOT NULL
- cat カテゴリ
プログラミング設計
ユーザーからのアクセスを振り分け、そのアクセスページに対してどのような動作処理を行うか、というようなプログラムを組むことになります。
ここでは、アプリケーションのアクセスページごとにcontrollerクラスを作り、その中のユーザーの操作に対する動作処理単位として、actionというメソッドを定義する構成にしております。
コントローラー
アクション(ユーザーの操作に対する動作単位)
概要
- IndexControllerクラス(更新情報表示)
-
- メイン画面表示 indexAction–>news.tpl
- CertifiControllerクラス(認証処理)
-
- ログイン画面↓ indexAction–>newslogin.tpl
- ログイン認証 chkLoginAction ↓認証成功 ↑失敗
- ManageControllerクラス(投稿管理)
-
- 機能選択画面 indexAction–>contmain.tpl
- radio 投稿する dtpost
- radio 詳細リンク登録 dirpost
- radio 画像アップロード imgpost
- radio 投稿非表示設定 dtnondisp
- radio ログイン情報追加登録 adduser
- 送信データ確認チェックし処理を振り分ける画面 chkdispachAction
- case dtpost–>dtpost.tpl–>showImgidAction–>showImgid.tpl
- case dirpost–>dirpost.tpl
- case imgpost–>imgpost.tpl
- case dtnondisp–>dtnondisp.tpl
- case adduser–>adduser.tpl
- 例外キャッチ–>exception.tpl
- 誤った操作–>コメント付きで機能選択画面に戻る。
- 呼び出された個々の管理機能へのリクエストをチェックし、処理をする。 chkWorkAction
- case dtpost–>確認画面生成dtpostConfirm()–>dtpostConfirm.tpl–>データベース登録処理dtpostAction
- case dirpost–>確認画面生成dirpostConfirm()–>dirpostConfirm.tpl–>データベース登録処理dirpostAction
- case imgpost–>データベース登録処理imgPostDb()
- case dtnondisp–>データベース登録処理$dt_obj->addDtdtop($dt_id)
- case adduser–>データベース登録処理$certifi_obj->chgPass($name, $newpass),$certifi_obj->addUser($name, $newpass)
- 誤った操作–>コメントつきで前画面または機能選択画面に戻る。
- ログアウト処理 logoutAction
- 機能選択画面 indexAction–>contmain.tpl
- リクエスト処理
-
- IndexRequestクラス IndexControllerクラスからのみ呼び出される。自動生成
- CertifiRequestクラス CertifiControllerクラスからのみ呼び出される。自動生成
- PostRequestクラス PostControllerクラスからのみ呼び出される。自動生成
- モデル
-
- Catクラス
- Certifiクラス
- Dtクラス
- Linkdirクラス
- Myimgクラス
- TableConfigクラス(モデルに使われる定数定義)
- ビュー
-
- templates/~.tpl
- 上記で書かれてある生成されたtplファイル
- そのpartsであるheader.tpl, footer.tpl, sider.tpl, pager.tpl
- templates_c/~.tpl キャッシュとして使われる。自動生成
- MySmartyクラス Smarty拡張クラス
- templates/~.tpl
- グローバルな設定
-
- config.php
- D_MODE 開発、本番モード切替
- DSN1 使用するDNS名
- DS DIRECTORY_SEPARATOR
- PLEVEL document_rootからの階層
- SYSROOT
- DOCROOT
- APPNAME アプリケーション名=ディレクトリ名
- HOST スキーム+$_SERVER[‘SERVER_NAME’]
- MNG_TOP ログインが必要な管理画面表示コントローラ名
- SKM http:// or https://
- PDO1 使用するpdoオブジェクト名の登録
- LITE sqliteを使う場合はon
- WEBROOT web root名
- NOTECE_STR[] location hederにのせる文字列
- dbinit.php データベース接続情報
- config.php
コーディング・デバッグ
- 結合テスト用コーディング
- 処理の流れを示すデバックコードを埋め込んであるコーディングをおこなう。
- 納品用リファクタリング適用コーディング
- PSR-2標準コーディング規約に準拠したコーディングに整形する。
テスト
- 単体テスト
-
- sql文テスト
- パターンマッチ文テスト
- モデルディレクトリ内のクラスプロパティーのテスト
- その他、アプリケーション内で単体でチェックできる関数のテスト
- 結合テスト
-
- フロントコントローラーによる振り分け機能のチェック
- 例外処理が機能しているかをチェック
- リクエストデータの処理の流れが正常かをチェック
- セキュリティー用コーディングがなされているかをチェック
- アウトプット処理が期待通りなされているかをチェック
☆ 関連ページは以下に記載されております。↓↓
phpフレームワーク自作連載目次
- タグ:
- phpframe