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プログラムにおけるフレームワーク処理の流れ
- phpで書かれたサイトのアドレスにアクセスします。
- アドレスに書かれたファイルを取り出します。
- phpエンジンをとおして、アプリケーションの処理を実行します。
- その際に、phpフレームワークに書かれた、処理手順を通して、データーや外部ライブリーの機能を呼び出し、処理を行います。
- クライアントの画面に出力する必要がある場合は、最終的にhtmlファイルとして生成されます。
- ファイルが送り出され、クライアントのブラウザの画面に出力内容が映し出されます。
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フレームワーク自作連載目次
- タグ:
- phpframe