PHP dfw2 コンセプトと基本的な動作 - dfwLib2

開発コンセプト

  • PHPでWebシステム開発を行ううえで、足りないと思われるところだけをライブラリ作成(主にルーティングとCVモデル)

  • PHPはもともとWebサービスに特化した言語であるので、大規模なフレームワークを使用しなくてもほぼ必要な機能が揃っている

  • 「シンプルで簡単な言語でのシステム開発を、シンプルで簡単に行うためのライブラリ」

  • 基本的にPHPで事足りるのに、さらにフレームワークを利用すると学習コストがかかる(すばやくWebサービスが作れるのがPHPのメリットでは?)

  • PHPフレームワークのバージョンアップが非常に激しい上に、下位互換がない場合がある(今 Symfony1系で動いているシステムを2系にバージョンアップしますか? 1系は開発終了していますけど)

1ファイルのみで実行

  • dfwLib2使いたい → 「index.php」さえおけばOK

  • 内部の処理が知りたい → 「index.php」を読めばOK

  • フレームワークの処理をブラックボックス化しない
  • 必要最低限の機能しか提供しない

dfwLib2 提供機能

  • モジュールセレクタ(ルーティング)
  • Controll-View機能(Viewは PHP、Smarty、Twigを利用可能)
  • XSS対策、CSRF対策、ログ出力、Validate 機能
  • DBアクセスclass(PDOラッパー)※正確にはdfw2ライブラリ提供機能でありません。独立した機能(ファイル)です

dfwLib2 動作概要

HTTPリクエスト

リクエストはすべて「index.php」で実行されます(フロントコントローラーがindex.php)

GET または POST のCGIパラメータ「dfw」で、実行モジュールを指定します。

CGIパラメータ「dfw」が存在しない場合は、トップモジュールが指定されます。

(トップモジュールは bootstrap.php で指定します)

dfwLib2フロントプログラム(index.php)は、指定されたモジュールPHPを実行します。

http://sample.com/?dfw=hoge

スマートURL が ON の場合は、第1パス名でモジュールを指定します。

http://sample.com/hoge/         ← hoge.php が実行

モジュールPHPプログラム

モジュールPHPプログラムには、ビジネスロジックを記載します。

画面出力(echo)は行わないでください。

ビューで表示したい情報がある場合、setView命令でビューに受渡します。

setView( 'name', $userName );

連想配列の情報を一度に設定する事も出来ます。

setViews( $arrUserData );

モジュールPHP実行終了前に、表示するビューテンプレートを指定します。

setTemplate( 'hogeok.html' );

条件に応じて使用テンプレートを切り替えることも出来ます。

if( $result === false ) {
    setTemplate( 'hoge_error.html' );
} else {
    setTemplate( 'hogeok.html' );
}

return でモジュール処理を終了させることが出来ます。

if( $result === false ) {
    setTemplate( 'hoge_error.html' );
    return;
}
// 正常処理へ

 

ビューテンプレート

モジュールPHPで設定した、ビューテンプレートが表示されます。

ビューテンプレートは PHP、Smarty、Twig のどれかを使用出来ます。

(利用するテンプレートエンジンは bootstrap.php で指定します)

ビューではモジュールPHPで設定した情報を取得し表示します。

※取得した情報は自動エスケープされています

-Twigテンプレートの場合

{{name}}

-Smartyテンプレートの場合

{$name}

-PHPテンプレートの場合

<?php v('name'); ?>

 

dfw2 DB クラス(PDOラッパー)

dfw2 ライブラリでは「DBアクセス」のための、DBクラス(PDOラッパー)を提供しています。

DBクラスは、単体でも利用できます。(バッチ等での利用も可能)

詳細は下記の「DBクラスマニュアル」を参照してください。

DBクラスマニュアル

 

dfw Ver1 との違い

  • DBクラスが単体利用のため別ファイルになりました
  • DBクラスが例外でのエラーハンドリングになりました(Ver1.0の戻り値falseエラーも使用可能)
  • テンプレートエンジンでの自動エスケープ処理になりました(setViewRaw関数は廃止)
  • includeModule関数を廃止しました
  • memcachedセッションが使えるようになりました