KoMA-PHP Framework(リファレンス)
Core
処理クラス群です。HTMLフォームのサポートからデータベースのアクセスまで様々な機能を提供します。コントローラであってもビューであってもモデルであっても、このCore機能から提供され、最終的にCore機能を利用していることが多いです。
このCoreディレクトリ内にクラスを設置し、fwcore/Read/classに追加することにより独自Core機能も作成可能です。
ここでは最新バージョン(2.0.0)で提供されているCore機能の説明をしています。
基本的にStart時に全て読み込みしてから基幹処理を実行するため、基本的にコントローラ・モデル・ビューのどこでも好きな場所で、好きなタイミングで利用することができます。
利用方法は共通で、 {クラス名}::{メソッド名}() です。(メソッドにより引数が必要です)
Access
アクセスがあった際に呼び出される機能です。ユーザエージェントの解析やアクセスログ詳細の保管にお役立てください。
※今後、このフレームワークを利用したアプリケーション提供でアクセスログ保管機能を備えたAccessクラスを実装しています
メソッド名 |
機能内容 |
引数 |
返却値 |
---|---|---|---|
ua() |
ユーザエージェントを解析して返す |
HTTP_USER_AGENT文字列 |
ユーザエージェント解析結果(array() / null) os:{ disp:画面表示用, sw:変数利用用,}, browser:{ disp:画面表示用, sw:変数利用用,}, device:{ disp:画面表示用,sw:変数利用用,} |
Config
fwcore/Config/配下の設定ファイルを取得するための機能です。もっともよく利用する機能の1つと言っても過言ではないでしょう。ビューテンプレートを利用する際は必ずいずれか(入力や一覧設定など)をアクセスや引き数により切り分け、実行しています。
メソッド名 |
機能内容 |
引数 |
返却値 |
---|---|---|---|
get() |
設定ファイルの設定を返却 |
設定ファイル名, 取得設定情報(「.」でつなぐ) |
指定した取得設定情報内容(string / array() / null) |
DbModel
データベースアクセス処理のコア機能です。モデルの読み込み、SQL実行、トランザクション、SQLエスケープなど、基本的な機能を備えています。最新の2.0.0時点ではMySQLとPostgreSQLのみ対応しております。
fwcore/Config/database.dbの値を変更することにより指定した方が利用可能となります。
メソッド名 |
機能内容 |
引数 |
返却値 |
---|---|---|---|
read() |
指定したモデルを読み込み、インスタンス化する |
モデル名 |
モデルインスタンス (object / null) |
connect() |
fwcore/Config/databaseの設定情報によりデータベースに接続する |
─ |
DBコネクション(object / throw DB接続エラー) |
getLastError() |
DBエラーを取得する |
DBコネクション |
DBエラー情報(内容は接続先DBの種類による) |
execute() |
Model::query()を実行する |
SQL文字列 |
Model::query()の実行結果 |
query() |
DBに接続し、SQLを実行する |
SQL文 |
DBリソース(resource / null) |
Tran() |
トランザクションを開始する |
─ |
Model::execute()実行結果 |
RollBack() |
トランザクションをロールバックする |
─ |
Model::execute()実行結果 |
Commit() |
トランザクションをコミットする |
─ |
Model::execute()実行結果 |
select() |
セレクト文を実行する |
対象テーブル(string),where条件(array(key=>value)),1件だけ取るか(true/false),ソート条件(array(key=>value)) Where条件は一致かnullかのみ。valueがnullの場合は自動でNULLのフィールドを検索する 1件だけとる場合はなるべくソート条件を指定しておくと意図通りの情報が得られる ソート条件は0がasc、1がdesc |
取得データの連想配列(行番号は0から)(array() / null) 1件だけとる場合は行番号なしで直にカラム情報 |
fetch() |
DBリソースから1行連想配列で取り出す(利用DBによりfetchメソッドが違うため) |
DBリソース |
結果レコードの連想配列 array() |
insert() |
インサート文を実行する |
対象テーブル(string),登録情報(array(key=>value)) valueがnullの場合は自動でNULLを登録する |
Model::execute()実行結果 |
update() |
アップデート文を実行する |
対象テーブル(string),更新情報(array(key=>value)),更新対象(array(key=>value)) Where条件は一致かnullかのみ。valueがnullの場合は自動でNULLを設定する valueがnullの場合は自動でNULLを登録する |
Model::execute()実行結果(影響行数) |
delete() |
デリート文を実行する |
対象テーブル(string),削除対象(array(key=>value)) Where条件は一致かnullかのみ。valueがnullの場合は自動でNULLを設定する |
Model::execute()実行結果(影響行数) |
es() |
Model::escape()のエイリアス |
エスケープ対象文字列(string),''付きで返却値を得るかどうか(boolean) |
エスケープ文字列 string |
escape() |
文字列をSQLエスケープする |
エスケープ対象文字列(string),''付きで返却値を得るかどうか(boolean) |
エスケープ文字列(string) |
Form
入力コントロールのHTML生成機能です。最低限の入力コントロールHTML生成に対応しています。最新の2.0.0時点ではHTML5で利用となったtype のほとんどには対応しておりません。
必要に応じて自身で追加するか、ビューで直に記述してください。
引数の「設定」ではkey=valueにてコントロール内のHTMLに埋め込みます。
例えばonclickのようにactionを設定したり、classでcssを設定したり、幅広く利用できます。
また、初期値は基本的にHTMLエスケープされたものが設定されます。
メソッド名 |
機能内容 |
引数 |
返却値 |
---|---|---|---|
text() |
type=text の入力コントロールHTMLを生成する |
コントロール名(string),初期値(string),設定(array()),表示フラグ(boolean) |
type=text の入力コントロールHTML(string) |
password() |
type=password の入力コントロールHTMLを生成する |
コントロール名(string),初期値(string),設定(array()),表示フラグ(boolean) |
type=passwordの入力コントロールHTML(string) ※パスワード入力は機密情報であるため、初期値はリセットされます ※表示フラグTrueのときは********が画面表示されます |
label() |
初期値に設定された値を表示するHTMLを生成する |
コントロール名(string),初期値(string),設定(array()),表示フラグ(boolean) |
ラベルHTML(string) |
hidden() |
type=hiddenの入力コントロールHTMLを生成する |
コントロール名(string),初期値(string),設定(array()),表示フラグ(boolean) |
type=hiddenの入力コントロールHTML(string) |
textCommon() ※privateメソッド |
text(),password(),label(),hidden()から受け取りそれぞれHTMLを返却する |
入力タイプ(string),コントロール名(string),初期値(string),設定(array()) |
入力コントロールHTML(string) |
button() |
type=buttonの入力コントロールを生成する |
コントロール名(string),ボタン表示名(string),設定(array()) |
type=buttonの入力コントロールHTML(string) ※<button>~</button>形式 |
submit() |
type=submitの入力コントロールを生成する |
コントロール名(string),ボタン表示名(string),設定(array()) |
type=submitの入力コントロールHTML(string) ※<button>~</button>形式 |
buttonCommon() ※privateメソッド |
button(),submit()から受け取りそれぞれHTMLを返却する |
ボタンタイプ(string),コントロール名(string),ボタン表示名(string),設定(array()) |
ボタン入力コントロールHTML(string) |
textarea() |
テキストエリアの入力コントロールを生成する |
コントロール名(string),初期値(string),設定(array()),表示フラグ(boolean) |
テキストエリアの入力コントロールHTML(string) ※表示フラグtrueの場合は改行コードなどは変換されます |
select() |
セレクトボックスの入力コントロールを生成する |
コントロール名(string),選択リスト(array(key=value)),初期値(string),設定(array()),表示フラグ(boolean),Key画面表示フラグ(boolean) ※select()ではKey画面表示フラグは未使用です |
セレクトボックスの入力コントロールHTML(string) ※表示フラグtrueの場合は選択リストに該当する初期値のvalueが表示されます。 |
radio() |
ラジオボタンの入力コントロールを生成する |
コントロール名(string),選択リスト(array(key=value)),初期値(string),設定(array()),表示フラグ(boolean),Key画面表示フラグ(boolean) |
ラジオの入力コントロールHTML(string) ※表示フラグtrueの場合は選択リストに該当する初期値のvalueが表示されます。 |
check() |
チェックボックスの入力コントロールを生成する |
コントロール名(string),選択リスト(array(key=value)),初期値(array(key1,key2...)),設定(array()),表示フラグ(boolean),Key画面表示フラグ(boolean) |
チェックボックスの入力コントロールHTML(string) ※表示フラグtrueの場合は選択リストに該当する初期値のvalueが表示されます。 |
file() |
input type=fileの入力コントロールを生成する |
コントロール名(string),初期値(string),設定(array()),表示フラグ(boolean) |
input type=fileの入力コントロールHTML(string) ※表示フラグtrueの場合でvalueが画像ファイルの場合は画像も表示します |
Helper
色々と便利な機能はあるけど個別クラス化するほどでもない機能群です。最も自由にカスタマイズできるCore機能と言えるでしょう。
こちらに機能詰め込み、意味合いを持たせたラッパークラスを用意するのも良いかもしれません。
※KoMA-PHPでも徐々に拡張されます。バージョンアップのマージの際にはご注意ください。
メソッド名 |
機能内容 |
引数 |
返却値 |
---|---|---|---|
redirect() |
指定先(サイト内)にリダイレクトします |
リダイレクト先(string) |
─ |
ak() |
array_key_exists
のエイリアス |
検索キー(文字列),検索元配列(array()) |
array_key_exists実行結果(boolean) |
urlen() |
urlencode
のエイリアス |
文字列(string) |
urlencode実行結果(string) ※ただしスラッシュ「/」はfwcore/Config/app.SLASHに設定された文字列に置換されます |
urlde() |
urldecode
のエイリアス |
文字列(string) |
urldecode実行結果(string) ※ただしfwcore/Config/app.SLASHに設定された文字列はスラッシュ「/」に置換されます |
createMultiString() |
ランダムな半角英数文字列を生成する |
文字数(integer) |
生成文字列(string) |
getFilenameInDir() |
指定ディレクトリ配下のファイル名一覧を取得する |
ディレクトリ名(string),ファイル一覧(array()) |
ファイル一覧(array()) |
remove_dir() |
指定ディレクトリ配下のファイルを全て削除する |
ディレクトリ名(string) |
─ |
jsonen() |
json_encodeのエイリアス ※結果はUTF8でエンコードされます |
任意の配列(array()) |
JSON文字列(string) |
prettyByte2Str() |
バイトを近い単位に変換する |
バイト数値(integer) |
変換結果(string) ※例えば1024バイト以上だと(○KB) |
Html
リンクHTMLや置換、HTMLエスケープなどの機能を備えています。少しHelperに近い機能ではありますが、HTML生成に特化した部分となります。
ビューになるべくHTMLを書いていくため、あまり充実はしていませんが、よく使うHTMLタグなどはこちらに機能追加していくと便利です。
※KoMA-PHPでも徐々に拡張されます。バージョンアップのマージの際にはご注意ください。
メソッド名 |
機能内容 |
引数 |
返却値 |
---|---|---|---|
link() |
aタグを生成します。 |
リンク先URI(string),表示文言(string),設定(array()),内部リンクフラグ(boolean) |
リンクHTML(string) ※内部リンクフラグ(初期値true)をtrueにするとサイトのルートディレクトリ(fwcore/Config/app.httproot)へのリンクとなります。 |
tAreaForDisp() |
テキストエリア系のテキスト情報をWEB表示用に置換する ・タブ(\t)を半角(?)4つに ・改行コード(\n,\r\n)を<br />に |
対象文字列(string),htmlエスケープを行うか(boolean) |
置換後文字列(string) |
hsp() |
htmlentities
のラッパー |
対象文字列(string) |
htmlentities実行後文字列(string) |
Input
サーバーに送信された$_POST または$_FILES を取得します。
メソッド名 |
機能内容 |
引数 |
返却値 |
---|---|---|---|
get() |
$_POST
→$_FILES
の優先順で入力コントロールから送信された値を取得する。 |
送信キー(string) |
送信値(string / array()) ※送信された情報による ※送信キーに該当する情報がなければNULL |
all() |
$_POST
をそのまま取得 ※$_FILESは取得しない |
─ |
$_POST |
Log
ログ出力クラスです。fwcore/storage/Log/配下に日付毎にログファイルを出力します。開発中のデバッグにも便利です。
基本的には誰が何をいつ更新したか残しておき、有事に追うためのものです。
※デフォルトの機能でログイン時はadmin_idを取得していますが、ログイン機能がない場合は不要です
メソッド名 |
機能内容 |
引数 |
返却値 |
---|---|---|---|
set() |
ログ内容を日付毎に書き込む。 |
出力文言(string) |
─ |
メソッド名 |
機能内容 |
引数 |
返却値 |
---|---|---|---|
send() |
メールを送信する |
メールタイトル(string),メール本文(string),メール送信元(string),メール送信先(string),メール識別ID(string) |
成功・失敗(boolean) |
Pager
ページャークラスです。一覧など1ページにたくさんの情報を表示する場合、あまりに多すぎると表示に時間がかかってしまったりサーバーに負荷がかかったりいいことはありません。
そこで1ページに表示する情報を区切り、ページングを行うことにより表示速度の改善を目指すのが通例となっています。
もちろん、一覧画面はあくまで一覧なので最低限の情報のみにとどめておき、詳細画面で全ての情報を見せるといった工夫も必要です。
メソッド名 |
機能内容 |
引数 |
返却値 |
---|---|---|---|
thisPageList() |
現在のページに表示する一覧情報を取得する ※1ページに表示する件数が未指定の場合はfwcore/Config/app.pagerの設定値となります |
一覧データ(array(0~のkey=array(info))),指定ページ(integer),1ページに表示する件数(integer) |
指定ページの1番目から1ページに表示する件数分の一覧データ(array(0~のkey=array(info)) |
pagerHtml() |
表示用のページャーHTMLを生成する |
指定ページ(integer),全体のデータ個数(integer),全体のデータ個数(string),1ページに表示する件数(integer) |
ページャーHTML ※fwcore/Config/app.pagersplitを指定することでページ数自体が多いときにもページャーHTMLの表示個数を絞り込みます。 |
Request
サーバーに送信された$_GET または$_POST を取得します。
メソッド名 |
機能内容 |
引数 |
返却値 |
---|---|---|---|
get() |
$_GET
→$_POST
の優先順で入力コントロールから送信された値を取得する。 |
送信キー(string) |
送信値(string / array()) ※送信された情報による ※送信キーに該当する情報がなければNULL |
getall() |
$_GET
をそのまま取得 ※$_POSTは取得しない |
─ |
$_GET |
Session
セッション関数 、$_SESSION についての対応を行います。基本的にはInputやRequestと同様、フレームワークの規約を守るためのもので、直接呼び出しても問題はありませんが、
可読性や再利用性を高めるためにも利用を推奨します。
メソッド名 |
機能内容 |
引数 |
返却値 |
---|---|---|---|
start() |
session_start
を実行する。 |
─ |
─ |
get() |
$_SESSION
に保管された値を取得する。 |
送信キー(string) |
送信値(string / array()) ※保管された情報による ※送信キーに該当する情報がなければNULL |
set() |
$_SESSION
に情報を保管する |
送信キー(string),送信値(null)※何でも可 |
─ |
destroy() |
指定キー、またはセッション全てを破棄する。 session_unset session_destroy |
送信キー(string / null) |
─ ※送信キーが指定されていれば指定のセッションのみ破棄し、指定されていなければセッションを全て破棄します |
reg_id() |
session_regenerate_id(true)のエイリアス |
─ |
─ |
createToken() |
ワンタイムトークンを発行する 発行したトークンはSession::set('fixToken')に保存。 |
接頭辞(string) |
生成したトークン文字列(string) |
checkToken() |
Session::createToken()で発行したトークンと一致するかチェックする |
トークン文字列(string) |
成否(boolean) |
Url
アクセスURL解析クラスです。fwcore/Core/Viewから一度だけ呼び出されています。
KoMA-PHPの綺麗なURLを実現している影の立役者です。
メソッド名 |
機能内容 |
引数 |
返却値 |
---|---|---|---|
analysis() |
REQUEST_URIを解析し、URLの区切り(/)の順番に配列に格納する。 ※?を見つけたらそれ以降の文字列は無視(QueryStringを可とするため) ※fwcore/Config/app.httprootの設定により、それ以降のURLのみ解析対象となります。 |
─ |
URL解析結果配列 |
Validation
値の妥当性検証クラスです。意味についてはこちらを参考にしてください。 KoMA-PHPでは[バリデーションは入力フォームと一対であるべき]との概念から、入力フォームの設定と同時にバリデーションの設定も行うように規約されています。そのバリデーション設定により利用されるのが当クラスです。
※バリデーションの細かい内容はinput の項で紹介します。
メソッド名 |
機能内容 |
引数 |
返却値 |
---|---|---|---|
validate() |
入力フォーム設定に基づきバリデーションを行う |
入力フォーム名(string) |
バリデーション結果(array(name=>array(num=>message))) |
single_validate() |
単発のバリデーション |
検証対象値(string/array()),バリデーション設定(array(key=>a|b|....)),メッセージの接頭辞 |
バリデーション結果(array(num=>message)) |
View
KoMA-PHPの根幹ともいえるクラスです。ルーティングによりコントローラを呼び出し実行するビューを呼び出します。
作り方にもよりますが、ログインにより制御するシステムを構築する際にログイン不要ページとログイン必要ページの切り分けをしたり、
ログイン許可機能かどうかのチェックをしたり、セキュリティ対策によく導入される自動ログアウト機能などもこのクラスに書くと良いでしょう。
実際に私もこのクラスでWEB画面と管理画面の切り替えを行う処理を記述しています。
メソッド名 |
機能内容 |
引数 |
返却値 |
---|---|---|---|
display() |
URI解析・ルーティングの選択・コントローラの選択・ビューの選択 場合によりエラーページ表示を行う |
─ |
アクセスURLにそった画面表示 ルーティング、コントローラ、ビューが正しく連携されていない場合、コントローラ・ビューで指示がある場合などはエラー画面を表示。 ※ログイン機能必須機能への未ログインアクセス・自動ログアウト対応時にはログイン画面遷移の仕組みをこの機能の中に実装します |
Model
KoMA-PHPにおけるMVCアーキテクチャのモデル部分は基本的な概念は既存のフレームワークと同じです。データベースとのやり取りを行い、画面表示しやすい形に加工した上でコントローラ(時にはビュー)にデータを渡します。
利用方法についてはマニュアル のモデルの項に記述されているとおりです。
本項ではモデルの基底クラスの機能について記述しています。
メソッド名 |
機能内容 |
引数 |
返却値 |
---|---|---|---|
insert() |
insertの実行結果を受け取る ※共通処理exeDb()を実行 |
入力画面名(string),追加するデータ情報(array(key=>value)) |
exeDb()実行結果 |
update() |
updateの実行結果を受け取る ※共通処理exeDb()を実行 |
入力画面名(string),更新対象(array(key=>value)),追加するデータ情報(array(key=>value)) |
exeDb()実行結果 |
delete() |
deleteの実行結果を受け取る ※共通処理exeDb()を実行 |
入力画面名(string),削除対象(array(key=>value)) |
exeDb()実行結果 |
exeDb() ※private |
insert(),update(),delete()から受け取った情報よりSQL文を組み上げるための下処理をする。 ・カラム名そのままではない日付入力やチェックボックスなどの複数選択情報、ファイルアップロード、パスワードなどの項目をDB保存可能な値として加工します。 fwcore/Config/inputのtype select・・・未選択("")の場合はNULLとする date・・・未入力の場合はNULLとする。Y-m-d形式に変換する datetime・・・未入力の場合はNULLとする。Y-m-d hi形式に変換する dateft・・・未入力の場合はNULLとする。Y-m-d形式に変換する(toはto_{name}に変換) hift・・・未入力の場合はNULLとする。hi形式に変換する(toはto_{name}に変換) check・・・未指定の場合は0を設定。「|」区切りで保存する file・・・{upname}に指定されたファイル名称で{updir}に指定されたディレクトリ(fwcore/storage/配下)にファイルを保存する。保存値は{upvalue}に指定された方式(詳しくはinputの項 参照) password・・・接頭辞をつけて暗号化する(hash+fwcore/Config/app.hash_key) もちろんパターンが増えた場合は追加することも可能ですし、バージョンアップを重ねて追加もされていく予定です。 ・「追加するデータ情報」の項目を追加します(Input::get()と同じコントロール名が送信された場合、追加するデータ情報側が正となります) ・fwcore/Config/tables.{テーブル名}に指定されたカラムに合致する情報のみを取り出します ・fwcore/Core/DbModelの各実行クラスへ情報を送信し、SQL実行結果を受け取ります。 |
入力画面名(string),更新対象(array(key=>value)),追加するデータ情報(array(key=>value)),実行区分(i = insert(),u = update(),i = delete()) |
・insert() DbModel::insertの実行結果(boolean) ・update() DbModel::updateの実行結果(0 or 多) ・delete() DbModel::deleteの実行結果(0 or 多) |
getByID() |
取得キー情報で1件データを取得。 |
対象カラム名(string),検索値(string) |
DbModel::select()の実行結果(array(num=>row)) |
get() |
データ取得 |
検索条件(array(key=>value)),1件のみ取得(boolean),ソート条件(array(key=>value)) |
DbModel::select()の実行結果(array(num=>row)) |
getBySearch() |
検索設定に沿ってデータ取得 |
検索設定名(string),(boolean),ソート条件(array(key=>value)) |
検索結果リスト(array(num=>row)) |
createWhere() |
検索設定に沿ってWhere条件を作る ・check・・・ カラム名 in ({値1},{値2},{値3}・・・) ・date・・・ Y/m/dフォーマット ・そのほか・・・ stype=0:カラム名 = {値} stype=1:カラム名 = %{値}% |
検索設定名(string) |
Where条件(string) |
createId() |
次のIDを算出する(Max+1) |
─ |
ID(integer) |
replaceClmName() |
カラム名のJOIN対応 ※「__」を「.」に変換するだけ |
カラム名(string) |
変換後カラム名(string) |
InputConfig
この項ではKoMA-PHPの特徴的な機能のひとつでもある入力フォームの設定「InputConfig」についての説明を行います。Webシステムに限らずひとつの動的なシステムを構築する際に入力フォームの設置は避けて通れない事項だと思います。
商品情報を入力する、お問い合わせ内容を入力する、検索条件を入力する・・・などなど多岐に渡ります。
特にデータベースに情報を保存するような入力フォームについては入力内容が妥当か必ず検証する必要があり、チェック内容は多岐に渡っており制作者を悩ませます。
KoMA-PHPでは入力フォームの生成とバリデーションを同じ枠で設定することにより、より気楽に高品質な入力フォームを設置できるように設計されています。
よく使うであろう入力パターンを用意しており、イレギュラーなパターンにもパターン追加により柔軟に対応しております。
下記ではバージョン[2.0.0]時点での設定可能なパターンについて列挙しています。
fwcore/Config/input
連想配列で定義し、
1階層目:フォーム名
2階層目:コントロール列名
3階層目:入力コントロールに対する設定(表示設定・保存設定・バリデーション設定など)
を行います。
このパターンの設定方法をある程度マスターすることがKoMA-PHPでの効率的開発の近道となります。
ビューより「$conName」を渡すことで呼び出すフォーム名が決まります。
設定内容 |
機能内容 |
指定可能値・説明 |
---|---|---|
type |
入力コントロールのタイプ |
text,password,label,textarea,hidden・・・それぞれテキスト入力(labelは表示のみ、hiddenは隠し値) date・・・日付型(※カレンダーコントロール) datetime・・・日時型(※カレンダーコントロール・時間は手打ち) dateft・・・日付の範囲指定(※カレンダーコントロール・コントロール名に自動で●●From,●●Toとつくが登録時には登録名に戻す) hift・・・日時範囲指定(※手打ち) file・・・ファイル選択コントロール(※画像の場合は編集モードで表示可能) select,radio,check・・・それぞれ選択式コントロール(※選択内容はselectで指定) |
name |
入力コントロールの名称 |
入力コントロールのname,idに設定される入力コントロール名です。typeが期間指定系でない限りはこの名称で入力コントロールが表示されます。基本的にはDBのカラム名と紐付けることとなります。 ※よりセキュリティを高めたい場合は別名をつけてバリデーション後に変換する処理を実装する必要があります |
label |
入力ラベル名 |
入力コントロールのタイトルラベル |
default |
デフォルト値設定 |
入力コントロール初期値の設定を行います。type=checkの場合は配列で定義すること。 DB値は設定できませんが、必須だけど入力を忘れやすい項目に入れておいたりプレースホルダーに似た役割も課すことができます。 選択系で最も選ばれやすい回答を初期で選択しておくようなことも可能です。 |
setting |
入力コントロールの装飾設定 |
key=>valueで複数設定できます。例えばCSSクラスを指定したい場合に"class"=>"abc"と設定したり、JavaScriptアクションを設定したいときに"onclick"=>"abc()"というような設定に使います。 入力コントロール内では<input type="radio" name="hoge" id="hoge" class="abc" ”onclick”="abc()" >のように表示されます。 ※HTMLとして設定可能な設定をしないと正常に動作しない可能性があります。 |
validate |
入力チェックの指定 |
「|」区切りで入力チェックパターンの指定を行います。 ※エラーメッセージ文言を変更したい場合はfwcore/Config/messageのチェックパターン名の文言を変更してください ※設定できる数に制限はありませんが、DBテーブルの状態、入力コントロールにあわせて適切に設定してください (特にチェックボックスは配列で扱われるため注意が必要です) requierd・・・必須。スペースのみの場合も未入力とみなします。チェックボックスやfileタイプもサポートしています。 エラーメッセージ:必須です max-{設定値}・・・設定値の文字数を最大値としてその値を超えていないかチェックします。 エラーメッセージ:指定文字数を超えています min-{設定値}・・・設定値の文字数を最小値としてその値を下回っていないかチェックします。 エラーメッセージ:指定文字数に足りません nummax-{設定値}・・・設定値を最大値としてその値を超えていないかチェックします。 エラーメッセージ:指定数を超えています nummin-{設定値}・・・設定値を最小値としてその値を下回っていないかチェックします。 エラーメッセージ:指定数に足りません sizemax-{設定値}・・・設定値を最大ファイルサイズとしてその値を超えていないかチェックします。 エラーメッセージ:指定ファイルサイズを超えています sizemin-{設定値}・・・設定値を最小ファイルサイズとしての値を下回っていないかチェックします。 エラーメッセージ:指定ファイルサイズに足りません hankaku・・・半角英数であるかチェックします。 エラーメッセージ:半角英数以外の文字が含まれています number・・・半角数値であるかチェックします。 エラーメッセージ:数字を入力してください match-{比較コントロール名}・・・比較コントロール名の値と同じであるかチェックします。 エラーメッセージ:入力内容が一致しません mail・・・メールアドレスの形式として正しいかチェックします エラーメッセージ:メールアドレスの形式が正しくありません url・・・URLの形式として正しいかチェックします エラーメッセージ:URLの形式が正しくありません file-{拡張子1},{拡張子2},{拡張子3}…・・・送信されたファイルが正常にアップロードされているか、指定の拡張子であるかチェックします。 エラーメッセージ:ファイルが正常にアップロードされていないか、指定のファイル拡張子ではありません img-{拡張子1},{拡張子2},{拡張子3}…・・・送信されたファイルが正常にアップロードされているか、送信されたファイルが指定の画像拡張子であるかチェックします。※getimagesizeにより偽装画像でないかもチェックします エラーメッセージ:ファイルが正常にアップロードされていないか、指定の画像拡張子ではありません type-{指定値1},{指定値2},{指定値3}…・・・指定した値以外が入力されていないかチェックします エラーメッセージ:URLの形式が正しくありません zip・・・郵便番号形式であるかチェックします(●●●-●●●●形式) エラーメッセージ:郵便番号の形式が正しくありません(123-4567) dateout-{日付}・・・指定の日付より前の日付をNGとします。 エラーメッセージ:過去の日付となっています datein-{日付}・・・指定の日付より後の日付をNGとします。 エラーメッセージ:未来の日付となっています date・・・日付の型(yyyy/mm/dd)が正しいかチェックします。 エラーメッセージ:日付が正しく入力されていません datetime・・・日時の型(yyyy/mm/dd hh:mm)が正しいかチェックします。 エラーメッセージ:日時が正しく入力されていません datetimeseconds・・・日時秒の型(yyyy/mm/dd hh:mm:ss)が正しいかチェックします。 エラーメッセージ:日時(分秒)が正しく入力されていません hitime・・・時分の型(hh:mm)が正しいかチェックします。 エラーメッセージ:時分が正しく入力されていません hitimeseconds・・・時分秒の型(hh:mm:ss)が正しいかチェックします。 エラーメッセージ:時分秒が正しく入力されていません dateft・・・日付の期間がFrom~Toで正しく設定されているかチェックします。 エラーメッセージ:日付が正しく入力されていないか、終了日付が入力されている場合、期間が正しく設定されていません hift・・・時間の期間がFrom~Toで正しく設定されているかチェックします。 エラーメッセージ:時間が正しく入力されていないか、終了時間が入力されている場合、期間が正しく設定されていません datecompare-{指定入力コントロール名}・・・日付の期間が設定値~指定入力コントロール値で正しく設定されているかチェックします。 エラーメッセージ:日付の期間指定が逆になっています datetimecompare-{指定入力コントロール名}・・・日時の期間が設定値~指定入力コントロール値で正しく設定されているかチェックします。 エラーメッセージ:日時の期間指定が逆になっています overlap-{モデル名}@{指定カラム1},{指定カラム2},{指定カラム3}…・・・モデルに指定されたDBテーブル内の指定カラムに重複する値がないかチェックします エラーメッセージ:既に存在しています password・・・パスワードの形式で入力されているかチェックします(必須、半角英数小・大・記号がそれぞれ1文字あるか、設定文字数以上あるか) エラーメッセージ:パスワードが正しく設定されていません |
requierd |
必須項目 |
trueに設定することでラベルに「※
」がつきます。この項目を設定するだけでは必須チェックにはなりません。 |
select |
選択項目の選択内容 |
type=select・check・radioのときにfwcore/Config/typeから取得するタイプ名を指定します。当然ながらfwcore/Config/typeに設定がない場合は何も表示されません。 DBテーブルの内容からリストを作りたい場合は以下のように設定します。 DB:{モデル名}-{カラム名1}={設定値}:{カラム名2}={カラム名3} 意味:{モデル名}テーブルから{カラム名1}={設定値}の検索条件でデータを取得し、リストをkey{カラム名2}=>value{カラム名3}で生成する 例: select=>"Item-category=2:item_cd=item_name" テーブル全てであれば検索条件は設定しません。今のところは検索条件は1つだけですが、複数の検索条件を指定したい場合はfwcore/View/inputtemplateのselectパターンを編集し、合致する形でfwcore/Config/inputに設定します。 |
format |
表示するフォーマット |
{指定パターン}={指定内容} 指定パターン:date PHPの日付フォーマット に則ってフォーマットします。 指定内容例: 値→2017/04/29 12:34:56 フォーマット→Y年m月d日 表示→2017年04月29日 ※指定なしの場合は「Y/m/d」となります 指定パターン:number number_format() に則ってフォーマットします。 ※指定内容は必要ありません 指定パターン:money money_format() に則ってフォーマットします。 ※第1引数のフォーマットの指定内容は上記ページをご確認ください ※指定なしの場合は「%i」となります |
help |
説明に表示する文言 |
フォントが少し小さめに表示されます。説明文や入力凡例、個数など単位を表示する場合にも利用できます。 |
term |
セレクトボックス・ラジオボタン・チェックボックスなどの選択式コントロールで利用する連続する数字などの要素を設定します。 |
{数字from}-{数字to}で設定 年を選ぶセレクトボックス "type"=>"select", "term"=>"1995-2030", "help"=>"年", |
counter |
文字数カウンタ |
trueに設定することで現在入力されている文字数を入力コントロール上部に表示します。 |
upname updir upvalue |
"type"=>"file"のときのファイルにつける名称 アップするディレクトリ DB保管する情報内容 |
upname:対象コントロール名 Input::get(対象コントロール名)で取得する。なければ生ファイル名でそのままアップされます。 updir:fwcore/storage/img または tmp配下のディレクトリ名 ディレクトリが存在しなければmkdir() で対象ディレクトリが作成されます。 upvalue:0(ファイル名)または1(拡張子のみ) お使いのDB設計に基づき指定してください。 ※ファイルをそのままDBテーブルに保存するBLOB型には対応していません。必要に応じて改造してください。 |
time_name |
datetime型で時間が別の保存カラムの場合にカラム名を指定します |
datetimeのみです。1カラムに全て保存する場合は別途改造が必要です。 |
button |
設置入力コントロールに対して何らかのアクションを行うボタンを設置します。 |
使用例としては限られていますが、単体コントロールの値を空にする「リセット」機能などに利用できます。 |
child |
trueに設定することで設置入力コントロールに対し子要素を設置します。 |
使用例としては地方選択後、連動した都道府県を選ぶようなコントロールの設置です。ただし親要素のonchangeやonclickなどに子要素に対するアクションを設定する必要があります。 子要素の表示内容などは親要素と同じ設定名称で"sub-"を頭につけて設定します。 設定例: "AreaCode"=>[ "type"=>"select", "name"=>"AreaCode", "label"=>"地方・都道府県", "setting"=>[], "validate"=>"requierd", "requierd"=>true, "select"=>"Area", "setting"=>["onchange"=>"creatPrefList('AreaCode','PrefectureCode');"], "child"=>true, //連動するコントロールの値 "subtype"=>"select", "subname"=>"PrefectureCode", "sublabel"=>"", "subselect"=>"PrefList", "subsetting"=>[], ],JavaScript //エリアコードから都道府県リストを作る function creatPrefList(name,target){ subhtml = '<select name="'+target+'" id="'+target+'" >'+ '<option value=" " > </option>'+ '</select>'; $("#"+target).hide(); $("#"+target).remove(); if($("#"+name).val() == " " || $("#"+name).val() == ""){ //未選択時は初期化 $("#subform_"+target).html(subhtml); }else{ var d = {"AreaCode":$("#"+name).val()}; $.ajax({ type:"POST", url:root+"Ajax/getPrefList", dataType: 'json', data:d, success:function(data){ option = '<option value=" " > </option>'; if(data.result == "1"){ var len = data.contents.length; for(i=0;i<len;i++){ option += '<option value="'+data.contents[i].key+'" >'+data.contents[i].value+'</option>'; } subhtml = '<select name="'+target+'" id="'+target+'">'+ option+ '</select>'; } $("#subform_"+target).html(subhtml); }, error:function(XMLHttpRequest,textStatus,errorThrow){ } }); } }Ajaxで呼び出すPHP側ではAreaCodeを受け取り、都道府県マスタからAreaCodeで検索した一覧を返却するような処理を書き、json_encodeして返却します。 ※これはAjaxを利用した一例です。府県マスタは固定化しても問題がないので必要項目の表示非表示だけで切り替え可能な作りにしておき、Ajaxを利用しないやり方もあります。 |
disp |
表示のみ |
trueに設定することで入力コントロールではなく単に画面に表示するのみとなります。 詳細画面などで入力を伴わない場面で利用できます。 |
nodisp |
表示しないパターン(ただし$action=="Edit"のときのみ) |
{対象カラム名}={条件1},{条件2},{条件3}… 対象カラム名はあくまでDBテーブルのカラム名です。 ユーザー機能で権限により表示させたくない項目がある(編集不可項目など)場合などに利用できます。 |
ListConfig
一覧表示の設定「ListConfig」についての説明を行います。Webシステムに限らず登録した情報の一覧表示は避けて通れない問題です。
特に情報の多いデータを表示する場合の表示の仕方や、コードを表示用に変換するなど一筋縄ではいかない点で、input に勝らずとも劣らない汎用性が求められます。
KoMA-PHPでは汎用性を高めた一覧情報を設定できるようにしており、ルーティング・コントローラ・モデルと連携することにより、より簡易にページャーやソート機能を実現可能としております。
下記ではバージョン[2.0.0]時点での設定可能なパターンについて列挙しています。
fwcore/Config/list
連想配列で定義し、
1階層目:一覧名
2階層目:列名(=DBカラム名)
3階層目:表示設定
を行います。
このパターンの設定方法をある程度マスターすることがKoMA-PHPでの効率的開発の近道となります。
ビューより「$conName」を渡すことで呼び出す一覧名が決まります。
設定内容 |
機能内容 |
指定可能値・説明 |
---|---|---|
label |
一覧ヘッダーの表示名 |
─ |
type |
表示タイプ |
select・・・fwcore/Config/typeから{select}で指定したタイプより表示値を取得 date・・・値を{format}に指定した形に整形して表示する db・・・指定DBテーブルより表示値を取得する。{select}に指定する。 {モデル名}-{取得カラム名} 設定例:商品情報で商品カテゴリコードからカテゴリ名を取得する "category"=>[ "label"=>"商品カテゴリ", "type"=>"db", "select"=>"Category-category_name", ]button・・・ボタンを表示する ボタン名:{name} 分類:{action} (link(画面遷移) または ajax(処理実行)) link:#{カラム名}# で値に変換(対象のIDなどのキー項目の設定に向いている) JavaScript:{js} action=ajaxのときにonclickで実行するJavaScript関数を指定。 #{カラム名}#や[{カラム名}] で値に変換(対象のIDなどのキー項目の設定に向いている) @rownum@は行番号に変換される ※ajaxを指定するときは$rootをjsにもてないためConfig::get("app","httproot")を引数に渡すかビューに直で書くこと icon・・・アイコン画像を表示する。Includeを利用するため、fwcore/storage/image/imagelist配下の画像を表示する 画像名:{i_name} 画像ALT:{i_alt} 実行JavaScript:{click} ※onclickのみ #{カラム名}#で値に変換(対象のIDなどのキー項目の設定に向いている) span・・・<span>タグでIDをつけて表示 (通常は表示値に対してはIDがつかず直に指定ができないため) |
input |
入力フィールドとして表示するかどうか(boolean) |
select,date,db,デフォルトにて対応。 デフォルトでは{inputtype}項目を指定すること。簡易であるためチェックボックス・ラジオボタンは不可。 この場合は必ずbutton項目を設け、ajaxで@rownum@を渡して保存処理を置くようにしてください。 ※全Submitでも良いですが、検索処理と重なった場合、コントローラが煩雑となるため分離を推奨しております。 |
setting |
入力コントロールの装飾設定 ※{input}をtrueで設定したときのみ有効 |
key=>valueで複数設定できます。例えばCSSクラスを指定したい場合に"class"=>"abc"と設定したり、JavaScriptアクションを設定したいときに"onclick"=>"abc()"というような設定に使います。 入力コントロール内では<input type="radio" name="hoge" id="hoge" class="abc" ”onclick”="abc()" >のように表示されます。 ※HTMLとして設定可能な設定をしないと正常に動作しない可能性があります。 |
width |
一覧ヘッダーの個々の横幅指定 (単位は任意のため何でも指定可能です) |
基本的にはtableタグの横幅100%して自動で振り分けられますが、ある程度の横幅を固定で担保して改行の発生を抑えたい場合に指定します。 |
sort |
ソート対象か(boolean) |
利用するには一覧系制御のコントローラからgetListBySearch()など一覧取得を実行する際にQueryStringを取得する処理を入れなければなりません。 記述例: $rq = Request::getall(); //QueriyString全取得 if(count($rq) > 0){ $this->order = $rq; } $this->param["list"] = DbModel::read("Item")->getListBySearch($this->order); |
SearchConfig
検索条件の設定「SearchConfig」についての説明を行います。Webシステムに限らず登録した情報の一覧表示は避けて通れない問題です。
特に情報の多いデータを表示する場合の表示の仕方や、コードを表示用に変換するなど一筋縄ではいかない点で、input に勝らずとも劣らない汎用性が求められます。
そんな一覧表示と対で利用するのがSearchConfigです。もちろん検索が必要のないデータを表示するだけの画面には設置は不要です。
下記ではバージョン[2.0.0]時点での設定可能なパターンについて列挙しています。
SearchConfigとはいえ、入力して検索条件をPOSTすることが目的なのでInputConfigとできる表現は非常に似ています。
(日付の期間指定など一部提供していない機能があります)
fwcore/Config/search
連想配列で定義し、
1階層目:検索フォーム名
2階層目:コントロール列名
3階層目:入力コントロールに対する設定(表示設定・保存設定)
を行います。
このパターンの設定方法をある程度マスターすることがKoMA-PHPでの効率的開発の近道となります。
ビューより「$conName」を渡すことで呼び出す検索フォーム名が決まります。
設定内容 |
機能内容 |
指定可能値・説明 |
---|---|---|
type |
入力コントロールのタイプ |
text,password,label,textarea,hidden・・・それぞれテキスト入力(labelは表示のみ、hiddenは隠し値) date・・・日付型(※カレンダーコントロール) datetime・・・日時型(※カレンダーコントロール・時間は手打ち) select,radio,check・・・それぞれ選択式コントロール(※選択内容はselectで指定) |
name |
入力コントロールの名称 |
入力コントロールのname,idに設定される入力コントロール名です。typeがdatetimeでない限りはこの名称で入力コントロールが表示されます。基本的にはDBのカラム名と紐付けることとなります。 ※よりセキュリティを高めたい場合は別名をつけてバリデーション後に変換する処理を実装する必要があります |
label |
入力ラベル名 |
入力コントロールのタイトルラベル |
default |
デフォルト値設定 |
入力コントロール初期値の設定を行います。type=checkの場合は配列で定義すること。 DB値は設定できませんが、必須だけど入力を忘れやすい項目に入れておいたりプレースホルダーに似た役割も課すことができます。 選択系で最も選ばれやすい回答を初期で選択しておくようなことも可能です。 |
setting |
入力コントロールの装飾設定 |
key=>valueで複数設定できます。例えばCSSクラスを指定したい場合に"class"=>"abc"と設定したり、JavaScriptアクションを設定したいときに"onclick"=>"abc()"というような設定に使います。 入力コントロール内では<input type="radio" name="hoge" id="hoge" class="abc" ”onclick”="abc()" >のように表示されます。 ※HTMLとして設定可能な設定をしないと正常に動作しない可能性があります。 |
requierd |
必須項目 |
trueに設定することでラベルに「※
」がつきます。 この項目を設定するだけで入力必須チェックが行われます(JavaScriptによるクライアント簡易チェック) |
select |
選択項目の選択内容 |
type=select・check・radioのときにfwcore/Config/typeから取得するタイプ名を指定します。当然ながらfwcore/Config/typeに設定がない場合は何も表示されません。 DBテーブルの内容からリストを作りたい場合は以下のように設定します。 DB:{モデル名}-{カラム名1}={設定値}:{カラム名2}={カラム名3} 意味:{モデル名}テーブルから{カラム名1}={設定値}の検索条件でデータを取得し、リストをkey{カラム名2}=>value{カラム名3}で生成する 例: select=>"Item-category=2:item_cd=item_name" テーブル全てであれば検索条件は設定しません。今のところは検索条件は1つだけですが、複数の検索条件を指定したい場合はfwcore/View/inputtemplateのselectパターンを編集し、合致する形でfwcore/Config/inputに設定します。 |
format |
表示するフォーマット |
{指定パターン}={指定内容} 指定パターン:date PHPの日付フォーマット に則ってフォーマットします。 指定内容例: 値→2017/04/29 12:34:56 フォーマット→Y年m月d日 表示→2017年04月29日 ※指定なしの場合は「Y/m/d」となります 指定パターン:number number_format() に則ってフォーマットします。 ※指定内容は必要ありません 指定パターン:money money_format() に則ってフォーマットします。 ※第1引数のフォーマットの指定内容は上記ページをご確認ください ※指定なしの場合は「%i」となります |
help |
説明に表示する文言 |
フォントが少し小さめに表示されます。説明文や入力凡例、個数など単位を表示する場合にも利用できます。 |
term |
セレクトボックス・ラジオボタン・チェックボックスなどの選択式コントロールで利用する連続する数字などの要素を設定します。 |
{数字from}-{数字to}で設定 年を選ぶセレクトボックス "type"=>"select", "term"=>"1995-2030", "help"=>"年", |
button |
設置入力コントロールに対して何らかのアクションを行うボタンを設置します。 |
使用例としては限られていますが、単体コントロールの値を空にする「リセット」機能などに利用できます。 |
child |
trueに設定することで設置入力コントロールに対し子要素を設置します。 |
使用例としては地方選択後、連動した都道府県を選ぶようなコントロールの設置です。ただし親要素のonchangeやonclickなどに子要素に対するアクションを設定する必要があります。 子要素の表示内容などは親要素と同じ設定名称で"sub-"を頭につけて設定します。 設定例: "AreaCode"=>[ "type"=>"select", "name"=>"AreaCode", "label"=>"地方・都道府県", "setting"=>[], "validate"=>"requierd", "requierd"=>true, "select"=>"Area", "setting"=>["onchange"=>"creatPrefList('AreaCode','PrefectureCode');"], "child"=>true, //連動するコントロールの値 "subtype"=>"select", "subname"=>"PrefectureCode", "sublabel"=>"", "subselect"=>"PrefList", "subsetting"=>[], ],JavaScript //エリアコードから都道府県リストを作る function creatPrefList(name,target){ subhtml = '<select name="'+target+'" id="'+target+'" >'+ '<option value=" " > </option>'+ '</select>'; $("#"+target).hide(); $("#"+target).remove(); if($("#"+name).val() == " " || $("#"+name).val() == ""){ //未選択時は初期化 $("#subform_"+target).html(subhtml); }else{ var d = {"AreaCode":$("#"+name).val()}; $.ajax({ type:"POST", url:root+"Ajax/getPrefList", dataType: 'json', data:d, success:function(data){ option = '<option value=" " > </option>'; if(data.result == "1"){ var len = data.contents.length; for(i=0;i<len;i++){ option += '<option value="'+data.contents[i].key+'" >'+data.contents[i].value+'</option>'; } subhtml = '<select name="'+target+'" id="'+target+'">'+ option+ '</select>'; } $("#subform_"+target).html(subhtml); }, error:function(XMLHttpRequest,textStatus,errorThrow){ } }); } }Ajaxで呼び出すPHP側ではAreaCodeを受け取り、都道府県マスタからAreaCodeで検索した一覧を返却するような処理を書き、json_encodeして返却します。 ※これはAjaxを利用した一例です。府県マスタは固定化しても問題がないので必要項目の表示非表示だけで切り替え可能な作りにしておき、Ajaxを利用しないやり方もあります。 |