$mainframe->getUserStateFromRequest()
Joomla! for 1.5.x
リクエストパラメータを取得しつつ、かつ特定のキーでセッションに保存するときに便利。
良く使われているのがリストのページング。
$limitstart = $mainframe->getUserStateFromRequest( "{$option}.list.limitstart" , 'limitstart' , 0 , 'int' ); $limit = $mainframe->getUserStateFromRequest( "global.list.limit" , 'limit' , 30 , 'int' );
- @param string
- セッションに保存するときのキー。ドット(.) で階層区切り。limit に使用している global.list.limit はシステム全体で利用されているキー。
- @param string
- リクエストパラメータのキー。POST か GET で同名の値を受け取ると、その値を取得しつつ該当のセッションを書き換える。
- @param mixed
- 値が指定されなかった場合のデフォルト値。
- @param string
- データ型。JRequest::getVar() を参照のこと。
フォームの入力内容を保持するのにも利用できる。たとえば確認画面を表示したり、入力エラーでフォームを再表示したり、いったん内容をセッションに保持しておきたいときなどに、状況にしばられずに一定のインターフェースで値を取得できる。
$name = $mainframe->getUserStateFromRequest("{$option}.list.name", 'name', 0, 'string'); $email = $mainframe->getUserStateFromRequest("{$option}.list.form", 'email', 0, 'string');
ただ一点問題がある。
この関数はリクエストパラメータの取得に JRequest::getVar() を利用しているのだが、この関数は特に指定しない限り値をフィルタリング(マスク)して返す。
たとえば値に "Hoge
一応、回避策として第5引数にある定数でフィルタ(マスク)指定をすると対応できる。*1
$email = JRequest::getVar('email', $default, $request_type, $data_type, JREQUEST_ALLOWRAW);
- JREQUEST_NOTRIM
- trim しない
- JREQUEST_ALLOWRAW
- フィルタリング(マスク)しない
- JREQUEST_ALLOWHTML
- 安全(?) なHTML のみ許可
問題は getUserStateFromRequest() がこのフィルタ(マスク)指定をアダプトしてくれないということ。
だから手前ブログみたいに 入力にHTML を許可する仕様を組みたい場合は、これが使えない。
んじゃーどうすっかというと。
$text = JRequest::getString( 'text' , $mainframe->getUserState("{$option}.form.text") , 'post' , JREQUEST_ALLOWRAW ); $mainframe->setUserState("{$option}.form.text", $text);
少々面倒だが、自分でセッション管理をするよりはまだマシだろう。