TOP

還暦過ぎのITはつらいよ!

プログラミング

phpフレームワーク自作1

目的と概要

八ヶ岳阿弥陀岳

phpを使ってwebシステムを開発するには、laravelとかslimというようなフレームワークを使って製作するのがあたりまえになってきているようです。

中規模以上の案件では、プロジェクトに複数の人が係わることになり、当然、共通の枠組みの中で作業を進めていくのであるから当然の事と思います。

ここであえて、自作でやろうと思うのは、model,view,controlというmvcの開発手法のエッセンスたるものを自分自身の中で噛み砕いて理解してみようと考えてからでした。

到達点としては、すべてのコードの意味しているものを理解でき、修正することが可能な、シンプルでかつ小規模なシステムにおいても実用可能であるものを目指すことにしています。

製作に当たっては、php7の仕様のみならず、html、css、javascript、データベース、その他web全般の知識が必要となります。ここではその詳細については触れることが多くないので、ネット上の各種入門サイト、入門書を参照いただければと考えております。

したがって、掲載内容については、php7を想定して書いているので、読者はこれらを習得しているものとして話を進めていますので、ご承知してもらいたい。

フレームワークを作る目的

プログラミング言語で作られた成果物は、一般的には、「入力ー>処理ー>出力」という流れがあります。
ホームページを開くには、pcからインターネットエクスプローラなどのブラウザを立ち上げ、アドレス欄にページアドレスを入力し、ページが表示されることになります。
 このページが画面上にうつしだせるのは、入力した内容が、インターネット回線からサーバに流れ、処理され、データをインターネット回線を通して、pcに送られ、表示処理されるという流れによるものです。
 この処理には、単純にリソースを送り出す(htmlファイルなど)ことも考えられますが、さらに、入力された内容に基づいて、処理が行われ、htmlファイルを生成し、送り出す、そういうことを実現させるのが、プログラミング言語の役割となっています。
php言語は、wordpressなどに代表されるブログツールに採用されており、実績あるものとして君臨し続けてきました。
そしてサーバにおけるphp言語を使ったアプリケーションに共通する処理手順として、phpフレームワークが使われることとなってきております。
ここでは、既存のモジュールを極力使わずに、自力で、フレームワークで使われている、ソースコードを理解し、修正できるレベルのものを、作っていこうと考えております。

自作phpフレームワークの概要

phpプログラムにおけるフレームワーク処理の流れ

フレームワーク概要
  1. phpで書かれたサイトのアドレスにアクセスします。
  2. アドレスに書かれたファイルを取り出します。
  3. phpエンジンをとおして、アプリケーションの処理を実行します。
  4. その際に、phpフレームワークに書かれた、処理手順を通して、データーや外部ライブリーの機能を呼び出し、処理を行います。
  5. クライアントの画面に出力する必要がある場合は、最終的にhtmlファイルとして生成されます。
  6. ファイルが送り出され、クライアントのブラウザの画面に出力内容が映し出されます。

mvcモデルとしてまとめる

php7が用意してある、関数やモジュールだけでも、アプリケーションは作れます。ところが、近年、アプリケーションそのものにいろいろな機能を乗せる必要がでてくると、このような旧態のやり方では、製作活動やメンテナンスの点で支障をきたすようになってきています。

phpフレームワークの骨格はオブジェクトという処理データのくくりとmodel(モデル)、view(ビュー)、control(コントロール)という設計思考の組み合わせで実現されていると考えられます。「オブジェクトとは」とか「mvcとは」とかはここでは、深く論じることはしませんが、製作するアプリケーションのメンテナンスのしやすさ、処理拡張の容易さを考えた場合はこれらの概念を意識して作り上げていく必要があると思われます。

ディレクトリ・ファイル構成


 framework3/  フレームワークのコア
   common/
    ClassLoader.php  クラスのオートロードを実現するクラス
Csrf.php ワンタイムトークンを使ったcsrf対策クラス ErrorFunc.php 例外エラー処理、エラー種別を定義表示するクラス F_util.php フィルタリング等ユーティリティスタティックメソッド
FactoryClass.php インスタンス生成クラス
Log.php ログを書き出すクラス 
lib/ html_view/ レンダリング処理 CreateHtml. 例外画面表示処理親クラス CreateTagStr.php htmlタグ生成クラス HtmlDts.php レンダリング対象データオブジェクト生成処理クラス
log/
データベーストランザクション処理ログ、エラーログ text file mvc/ BadRequestException.php 不正リクエスト検知例外クラス ControllerBase.php コントローラー親クラス CreateException.php 例外画面表示処理クラス
Dao.php データベース データ処理親クラス
DaoIterator.php オブジェクトをラッピングしてデータを処理する親クラス Db.php データベース接続操作クラス Dispatcher.php urlからの送信振り分け処理クラス MyvalidException.php カスタムバリデーションに係わるカスタム例外親クラス Post.php post送信変数格納クラス QueryString.php get送信変数格納クラス Request.php request処理、バリデーション親クラス RequestVariables.php リクエスト変数格納親クラス Session.php セッション操作処理クラス test/ テストコード temp/   アプリケーション共通雛形コード ApGlobal.php グローバルな設定をするクラス bootstrap.php オートロードを定義するクラスを設定する。 globalsetting.php エラーや例外処理に関するグローバルな設定 runfirst.php グローバルな処理クラスをまとめて読み込む APPNAME/ common/ AppErrorFunc.php アプリケーション独自エラー例外処理クラス MyvalidExceptionChild.php カスタムバリデーション処理クラス controllers/ IndexController.php アプリケーションに最初にアクセスしたときの処理コントロールクラス
CertifiController ログイン認証コントローラクラス
ManageController 管理処理コントローラクラス models/ Cat.php CatDao.php CertifiDao.php Dt.php DtDao.php Linkdir.php LinkdirDao.php Myimg.php MyimgDao.php request/ IndexRequest.php アプリケーションに最初にアクセスしたときのリクエストデータバリデーション等処理クラス
CertitiRequest.php
ManageRequest.php test/
アプリケーション用テストコード views/ mytemplate/ フレームワークレンダリングテンプレートファイル群格納用 cache/ フレームワークレンダリングテンプレートキャッシュファイル群格納用 util/ フレームワークレンダリング画面表示処理ユーティリティクラス格納用 CreateException.php フレームワークレンダリング例外エラー画面表示処理クラス templates/ smarty テンプレートファイル群格納用 templates_c/ smarty テンプレートキャッシュファイル群格納用 MySmarty.php smarty本体読み込み拡張クラス config.php アプリケーション設定 dbinit.php Dbクラスに読み込まれるdsn情報をかえすファイル
T_const.php データベーステーブル処理に使われる定数定義クラス data/ アプリケーションで使用するデータファイル、sqliteファイル格納用 composer.json vendor/ コンポーザーによるライブラリー格納 autoload.php smarty/ phpunit/ phake/ htdocs/ ドキュメントルート
APPNAME/ img/ js/ css/
example/ .htaccess index.php アクセス処理基点
initdb_news3test.php 初期、データベーステーブル生成用

* APPNAMEは製作するアプリケーション名、ここでは[news3]という名称になる。

フレームワークを使ったアプリケーションの流れ

アクセスの基点は外部公開領域内にある、phpファイルになります。webサーバーソフトの機能を使って公開領域外にあるアプリケーションプログラムに処理が移ります。フレームワークにおける適切な処理振り分けに基づいて、アプリケーションプログラムの処理は、コントローラーに当たるプログラム内で実現すべき処理の流れにそって、行われます。実際に処理にかかわるのは、フレームワークにある、プログラムを利用、継承する形で書かれたアプリケーションのコントローラの記述になります。
 ここでは、処理の流れを示すコントローラとなるのがアプリケーションフォルダー内、たとえばIndexControllerクラス、データーに対するビジネスロジックが、フレームワークのDbクラスの処理手順に沿って取り込まれた、データの操作処理内容を示すアプリケーションのmodelフォルダー内のphpファイル、viewにあたる画面出力に係わるのがフレームワークにあるhtml_viewフォルダー内のphpファイルまたは外部モジュールとして取り込まれた、samrtyテンプレートエンジンへの出力に係わるviewsフォルダー内のphpファイルになります。


☆ 関連ページは以下に記載されております。↓↓

phpフレームワーク自作連載目次

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください