mojavi+HTML_QuickFormで使うべきフィルタ

2006/01/23 | mojavi2

久保敦啓さんがインプレスのPHPムック本「まるごとPHP」に書かれていたフィルタです。
mojaviではユーザからの入力を$requestで一元管理しているけれど、HTML_QuickFormでは$_POST、$_GETで管理しているため、以下のフィルタを使うとよいとのこと。

 class MappingRequestVarsFilter extends Filter
 {
  function execute(&$filterChain, &$controller, &$request, &$user)
  {
   static $loaded;
   if ($loaded === null) {
    $loaded = true;
    if ($_SERVER[‘REQUEST_METHOD’] === ‘GET’) {
     $_GET = array();
     $_GET = &$request->getParameters();
    } else {
     $_POST = array();
     $_POST = &$request->getParameters();
    }
    $filterChain->execute($controller, $request, $user);
   } else {
    $filterChain->execute($controller, $request, $user);
   }
  }
 }

参照元はこちら

PCの判別

2006/01/16 | Net_UserAgent

PC用の判別は以下のサンプルを使用する。とりあえずブラウザ種別とOSを取得するサンプルを掲示。

require_once(‘Net/UserAgent/Detect.php’);
echo Net_UserAgent_Detect::getOSString();
echo Net_UserAgent_Detect::getBrowserString();

これでOS種別とブラウザ名を取得できる。

携帯電話の判別

2006/01/16 | Net_UserAgent

Pearを使った携帯電話の判別や各種情報の取得に以下のサンプルを使用。

require_once(‘Net/UserAgent/Mobile.php’);
$mobile =& Net_UserAgent_Mobile::factory();
//bool $mobile->isAirHPhone();
//bool $mobile->isDoCoMo();
//bool $mobile->isEZweb();
//bool $mobile->isJPhone();
//bool $mobile->isWAP1();
//bool $mobile->isWAP2();
//bool $mobile->isNonMobile();

echo $mobile->getName(); //DoCoMo等を返す

各キャリアで特徴的に取得できるのはgetName()メソッドだけかも。実質、現状では使い物になるかどうかわからない。

passwordエレメントのデータ持ち回り

2006/01/06 | HTML_QuickForm

QuickFormで「入力-確認-処理」の一連の流れを簡単に作ることができるけど、passwordについてはhiddenで持ち回りすることは標準でできない。以下のようにプロパティを設定してあげる必要がある。
—————————————————
$myForm=new HTML_QuickForm(‘myForm’,’post’);
$myPassword=& $myForm->addElement(‘password’,userPswd,’パスワード’);
$myPassword->setPersistantFreeze(true);

mojavi + QuickFormで独自ルール追加

2006/01/06 | mojavi2

mojavi + QuickForm で独自ルールを追加する際のサンプル。
ここではユーザID登録のように、データベースと一意性を絡めたルールを追加した。
仮定:データベースへの接続はPearのDBを使用
—————————————————
function initialize(&$controller, &$request, &$user){
 //親クラスinitialize関数を呼び出す
 parent::initialize(&$controller, &$request, &$user);
 //親クラスで定義したDBオブジェクトを変数に格納
 $mydb=$request->getAttribute(‘mydb’);
 $myForm=new HTML_QuickForm(‘myForm’,’post’);
 $myForm->addElement(‘text’,’userID’,’ユーザID’);
 $myForm->registerRule(‘idCheck’,’callback’,’_idCheck’,get_class($this));
 $myForm->addRule(‘userID’,’そのIDは使用中です’,’idCheck’,$mydb);
}

function _idCheck($value,$mydb){
 $sql=”SELECT user_id FROM tbl_user WHERE user_id='” . $value . “‘;”;
 $result=$mydb->query($sql);
 if(DB::isError($result)){
  return false;
 }elseif($result->numrows()>0){
  return false;
 }else{
  return true;
 }
}

これでできるはず。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net