プログラム関連

PHP dfw2 開発ドキュメント - dfwLib2

VIEWでの自動エスケープ

各テンプレートエンジンの「自動エスケープ」を利用しています

VIEWで表示したい情報は、モジュール内で setView 関数で設定します

setView( 'name', '<p>tatenosystem</p>' );
  • ビューでの出力(Smarty)
{$name}
  • ビューでの出力(Twig)
{{name}}
  • ビューでの出力(PHP)
<?php v('name'); ?>

エスケープしないで VIEW で表示したい場合は、テンプレートエンジンの表示バラメータを設定します

  • エスケープしないでビューでの出力(Smarty ver2~)
{$name|smarty:nodefaults}
  • エスケープしないでビューでの出力(Smarty ver3~)
{$var nofilter}
  • エスケープしないでビューでの出力(Twig)
{{name|raw}}
  • エスケープしないでビューでの出力(PHP)
<?php raw('name'); ?>

VIEWへの情報の渡し方(1)

  • PHPモジュール
setView( 'name', 'tatenosystem' );
  • ビューでの出力(Smarty)
{$name}
  • ビューでの出力(Twig)
{{name}}
  • ビューでの出力(PHP)
<?php v('name'); ?>

VIEWへの情報の渡し方(2)

  • PHPモジュール
$param = array();
$param['name'] = 'tatenosystem';
$param['desc'] = 'kami';
setView( 'user', $param );
  • ビューでの出力(Smarty)
{$user.name}
{$user.desc}
  • ビューでの出力(Twig)
{{user.name}}
{{user.desc}}
  • ビューでの出力(PHP)
<?php
    $user = getView('name');
    echo $user['name'];
    echo $user['desc'];
?>

VIEWへの情報の渡し方(3)

  • PHPモジュール
$param = array();
$param['name'] = 'tatenosystem';
$param['desc'] = 'kami';
setViews( $param );
  • ビューでの出力(Smarty)
{$name}
{$desc}
  • ビューでの出力(Twig)
{{name}}
{{desc}}
  • ビューでの出力(PHP)
<?php v('name'); ?>
<?php v('desc'); ?>

セッション処理・認証処理

認証機能を使わない場合

startSession() で、セッションを開始します。

セッション開始後は通常通り $_SESSION でセッションを使用します。

$key = $_SESSION['key']; // セッションの情報取得
$_SESSION['key'] = 'hogevalue'; // セッションに情報設定

$_SESSION の代わりに session関数 も使えます。

$key = session('key'); // セッション情報取得
session('key', 'hogevalue'); // セッション情報設定
  • セッション情報取得でセッションが存在しない場合は null が返却
  • session関数を使用すると、自動でセッションを開始します

認証機能を使う場合

認証が成功した場合、makeLoginSession() を実行します。

これにより、「認証済みフラグ(ログイン完了フラグ)」がセッションに保存されます。

makeLoginSession();

認証済みかのチェック(各モジュール毎に実行)

if ( isLogin() ) {
  // 認証OK
} else {
  // 未認証
}

isLogin() を実行すると、セッションが開始され、makeLoginSession() での認証がすでに行われているかチェックします。

第2引数にモジュール名を指定すると、エラー時にそのモジュールに移動します。

下記の場合は認証 NG 時に topモジュール にリダイレクトします。

isLogin('top');

第2引数にモジュール名を空文字指定すると、認証 NG 時に「HTTP/1.1 403 Forbidden」となります。

isLogin('');

認証後は、$_SESSION (もしくは session関数)でセッション機能を使用します。

セッションの削除

deleteSession() を実行します。

ログアウト時に使用します。

deleteSession();

 

CSRF対策機能

(1)情報送信ページ

モジュールで getCsrfCode() を実行してCSRF対策コードを取得します。

取得したコードをビューに渡します。

getCsrfCode() を使用すると、自動的にセッションは開始されます。

setView( 'csrfCode', getCsrfCode() );

ビューでは POST の HIDDEN データとして、CSRF対策コードを設定します。

<form name="hoge" method="post" action="">
  ……
  <input type="hidden" name="csrfCode" value="{$csrfCode}">
  ……
</form>

(2)情報受信ページ

HIDDEN データとして設定したCSRF対策コードを取得します。

checkCsrf関数で、正しいCSRF対策コードかチェックを行います。

戻り値は true false となります。

if ( checkCsrf( $_POST['csrfCode'] ) ) {
  // 正しい
} else {
  // CSRFチェックエラー
}

第2引数にモジュール名を指定すると、CSRFチェックエラー時にそのモジュールに移動します。
下記の場合はエラー時に topモジュール に移動します。

checkCsrf( $_POST['csrfCode'], 'top' );

第2引数にモジュール名を空文字指定すると、CSRFチェックエラー時に「HTTP/1.1 403 Forbidden」となります。

checkCsrf( $_POST['csrfCode'], '' );

 

バリデーション

バリデーションパターン(正規表現チェック)

データの妥当性をチェックする関数(validate関数)を利用します。

以下のバリデーションパターンが定義されています。

定義文字列 内容 正規表現
NUMBER 0~9 数字 /^[0- 9]$/
ALPHA A~Z アルファベット(小文字含む) /^[a- zA- Z]$/
ASCII ASCIIコード(半角英数字記号) /^[\x20- \x7E]$/
HEX 16進数表記(小文字含む) /^[0- 9A- Fa- f]$/
SPACE 半角スペース /^[ ]$/
HYPHEN ハイフン(マイナス記号) /^[- ]$/
UNDERBAR アンダーバー /^[_]$/
COMMA カンマ /^[,]$/
DOT ドット /^[\.]$/

※ 正規表現で文末は \z です。$ は(改行を含む)行末です。

| REQUIRED | 入力必須 | PHPのempty関数での評価 |
| EMPTY | 空文字を許可 | PHPのempty関数での評価 |
※ REQUIRED と EMPTY は同時に使えません。

  • $_GET['year']が「数字」であるかどうかチェック
if ( ! validate('NUMBER', $_GET['year']) ) {
    // NG処理
}

定義文字列は , (カンマ) で連結して使用ができます。

連結した場合 OR 条件 で評価されます。

  • $_GET['code']が「数字」か「アルファベット」で構成されているかどうかチェック
if ( ! validate('NUMBER,ALPHA', $_GET['code']) ) {
    // NG処理
}

定義文字列がない場合は「正規表現」でバリデーションパターンを定義できます。

if ( ! validate('/^[0- 9A- C]$/', $_GET['code']) ) {
    // NG処理
}

文字列長チェック

データの長さを妥当性をチェックする場合は、validate関数の第3引数と第4引数に長さの範囲を指定します。

1文字の 全角文字 も長さは1文字となります。

  • $_GET['code']が「数字」か「アルファベット」で、長さが3~7文字であるかどうかチェック
if ( ! validate('NUMBER,ALPHA', $_GET['code'], 3, 7) ) {
    // NG処理
}

正規表現のチェックは省略可能です。

正規表現チェックを行わない場合は、バリデーションパターンに空文字を設定します。

  • $_GET['code']の長さが3~7文字であるかどうかチェック
if ( ! validate('', $_GET['code'], 3, 7) ) {
    // NG処理
}

文字列長のチェックを「バイト単位」で行いたい場合は、「validateByte関数」利用します。

引数は「validate関数」と一緒です。

正規表現チェックを行わない場合は、バリデーションパターンに空文字を設定します。

  • $_GET['code']の長さが3~7バイトであるかどうかだけのチェック
if ( ! validateByte( '', $_GET['code'], 3, 7 ) ) {
    // NG処理
}

 

バリデーションエラーの取得

「validate関数」でデータの妥当性が NG だった場合、エラーの詳細は「getValidateError関数」で取得できます。

「getValidateError関数」では配列を取得できます。

取得した配列で、「正規表現チェック」、「最小長チェック」「最大長チェック」のどのチェックで NG だったのかが確認できます。

if ( ! validateByte('ALPHA,NUMBER,SPACE', $str, 2, 3)) {
	echo '<p>データエラー</p>';
	var_dump( getValidateError() );
}

getValidateError() の戻り値は失敗したチェック項目がキーとなる連想配列で取得されます。

値は「1」が入っています。上記プログラムですべてのチェックがエラーに成った場合は、以下の var_dump が表示されます。

array
  'pattern' => boolean true
  'min' => boolean true
  'max' => boolean true

チェック項目と連想配列のキーは、以下のとおりです。

| 連想配列キー | エラー内容 |
| pattern | 正規表現チェックエラー |
| min | 最小値チェックエラー |
| max | 最大値チェックエラー |

 

ログ出力

bootstrap.php ファイルにログ機能設定を記述すると、ログ出力関数が使用できます。

ログ出力は writeLog関数 を使用します。

第2引数でエラーレベルを指定します。無指定の場合のエラーレベルは info です。

writeLog('エラー内容', 'debug');
writeLog('エラー内容', 'd');

writeLog('エラー内容');
writeLog('エラー内容', 'info');
writeLog('エラー内容', 'i');

writeLog('エラー内容', 'warning');
writeLog('エラー内容', 'w');

writeLog('エラー内容', 'error');
writeLog('エラー内容', 'e');

writeLog('エラー内容', 'critical');
writeLog('エラー内容', 'c');

 

スタティックURL(スマートURL)機能

下記のような スタティックURL(静的URL)を使用することができます。

http://hogehoge.jp/login/0123/tatenosystem/
  • モジュール名は「login」になります
  • CGIパラメータ「get1」で「0123」が取得出来ます( $_GET['get1'] )
  • CGIパラメータ「get2」で「tatenosystem」が取得出来ます( $_GET['get2'] )
  • パスが存在すれば同様にCGIパラメータ「get3、get4、~」が取得できます。

スタティックURL を行うには、下記設定が必要です。

(1) $dfwConfig['core'] に以下の設定を行います

$dfwConfig['core'] = array(
   ...
   'url_mapping' => true,
   ...
);

(2) .htaccess の配置

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !- f
  RewriteCond %{REQUEST_FILENAME} !- d
  RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

 

リダイレクト機能

redirectModule() を使用することで 301リダイレクトのよるモジュールの呼び出しができます。

引数でモジュール名を指定します。

redirectModule('top');  // topモジュールへのリダイレクト

リダイレクト先へのモジュールにGET情報を送る場合は、CGIパラメータを記述します。

redirectModule('moduleName&site=hoge&user=ore');

第2引数でリダイレクト時の CGIパラメータ を記述できます(2013.07.90- )

redirectModule('moduleName', array('site' => 'hoge', 'user' => 'ore'));

スマートURLの場合は、第2引数配列の設定順番でリダイレクトURLが生成されます(2013.07.90- )

redirectModule('moduleName', array('site' => 'hoge', 'user' => 'ore'));

 → http://[BASE_PATH]/moduleName/hoge/ore