▶ プログラム関連
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