phpフレームワーク自作2

甲府盆地

フレームワークを説明するに当たって、実際にアプリケーションを製作したもので説明していきたいと思います。

フレームワークのコアな部分はプログラムを動かす最低限のものに抑えることと、アプリケーション本体部分をフレームワークに沿ってコーディングするための約束事は最小限に抑えることという方針の下に製作していくことにしました。

また、個人レベルでの製作を念頭においているので、作業を細かく分割して進めていくことを想定せず、中大規模プロジェクトには向いていないことをご了解していただくおもいます。

製作アプリケーションの概要は以下のようになっております。

アプリケーション名

news

システム構築の形

何を作るのか
  • ホームページに更新ニュースページを作る。
それを作ることにより実現できるもの
  • 同一ドメイン内で更新があった内容を知らせることが出来る。
  • また、そのページへのリンクからそのページに飛ぶことが出来る。
  • pcまたはスマートフォンから更新があった情報を登録し、ページに反映することが出来る。、
必要な機能
  • 情報を登録するデータベース処理機能
  • デザインとロジックを分離することが出来るテンプレートエンジン
  • 情報を登録、更新、停止できる処理機能
  • それらを操作するユーザ登録機能
  • 管理機能を操作できるようにするための認証機能
  • セッション
  • セキュリティ
  • ロジックエラー報告
システム環境(開発側)
  • windows7pro
  • xampp Version 7.1.8
  • PHP Version 7.1.8
  • Apache/2.4.2
  • sqlite3.15.1
  • 10.1.26-MariaDB
  • phpunit7.6.2
  • dbunit4.0.0
システム環境(運用側)

アウトプット設計

画面設計
  • 画面フロー
    画面推移
  • 更新情報画面
    更新情報画面
  • ログイン画面
    ログイン画面
  • 機能選択画面
    機能選択画面
  • 投稿画面
    投稿画面
  • 詳細リンク登録画面
    詳細リンク登録画面
  • 画像アップロード画面
    画像アップロード画面
  • 投稿非表示設定画面
    投稿非表示設定画面
  • ログイン情報追加画面
    ログ院情報追加画面
  • 画像idとファイル名対応表画面
    画像idとファイル名対応表画面
  • 例外エラー画面
    例外エラー画面

データベース設計

データベース名(sqlite)
  • news1.sq3
テーブル定義
  • cat カテゴリ
    • cat_id INTEGER NOT NULL PRIMARY KEY
    • cat_name TEXT NOT NULL

 

  • certifi 認証情報
    • ce_id INTEGER NOT NULL PRIMARY KEY
    • ce_name TEXT NOT NULL
    • ce_pword TEXT NOT NULL

 

  • contact コンタクトフォーム情報(ここでは不使用)
    • id INTEGER NOT NULL PRIMARY KEY
    • nm TEXT NOT NULL
    • con_method INTEGER NOT NULL
    • addr TEXT NOT NULL
    • title INTEGER NOT NULL
    • comment TEXT NOT NULL
    • date TEXT NOT NULL
    • ip TEXT NOT NULL

 

  • dt 投稿データ
    • id INTEGER NOT NULL PRIMARY KEY
    • cat_id INTEGER NOT NULL
    • title TEXT NOT NULL
    • 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
    • dir_path TEXT NOT NULL

 

  • myimg 画像情報
    • img_id INTEGER NOT NULL PRIMARY KEY
    • filename TEXT NOT NULL
    • 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
    • nm TEXT NOT NULL
    • lat TEXT NOT NULL
    • lng TEXT NOT NULL
    • icon INTEGER NOT NULL
    • title TEXT NOT NULL
    • map_dt TEXT NOT NULL

 

プログラミング設計

php自作フレームワークを使ってアプリケーションのコントローラに処理のシナリオを作る。

コントローラー(処理のシナリオ)
処理のシナリオcontroller
アクション(ユーザーの操作に対する動作単位)
ユーザーの操作に対する動作単位Action
IndexControllerクラス(更新情報表示)
  • メイン画面表示 indexAction–>news.tpl
CertifiControllerクラス(認証処理)
  • ログイン画面↓ indexAction–>newslogin.tpl
  • ログイン認証 chkLoginAction ↓認証成功 ↑失敗
PostControllerクラス(投稿管理)
  • 機能選択画面 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
リクエスト処理
  • 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拡張クラス
グローバルな設定
  • 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 データベース接続情報

コーディング・デバッグ

結合テスト用コーディング
処理の流れを示すデバックコードを埋め込んであるコーディングをおこなう。
納品用リファクタリング適用コーディング
PSR-2標準コーディング規約に準拠したコーディングに整形する。

テスト

単体テスト
  • sql文テスト
  • パターンマッチ文テスト
  • モデルディレクトリ内のクラスプロパティーのテスト
  • その他、アプリケーション内で単体でチェックできる関数のテスト
結合テスト
  • フロントコントローラーによる振り分け機能のチェック
  • 例外処理が機能しているかをチェック
  • リクエストデータの処理の流れが正常かをチェック
  • セキュリティー用コーディングがなされているかをチェック
  • アウトプット処理が期待通りなされているかをチェック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です