Firefox3をインストールしてみた
Firefox3をインストールしました。
速いです。
特にキャッシュからの読み込みが早いようでした。
Javascriptの解釈も早くなっているようで、memonoもぐりぐり回ります。
以前、Firefoxの開発者はIEの開発者の1/10の数でやっている。という記事を見たことがあるのですが、それを考えるとアツイですね。
Posted in その他 | No Comments
Firefox3をインストールしました。
速いです。
特にキャッシュからの読み込みが早いようでした。
Javascriptの解釈も早くなっているようで、memonoもぐりぐり回ります。
以前、Firefoxの開発者はIEの開発者の1/10の数でやっている。という記事を見たことがあるのですが、それを考えるとアツイですね。
Posted in その他 | No Comments
ZendにはValidateのライブラリもあるのか、ということで使ってみました。
こちらなどを見ると、
< ?phpのように、各Validatorのインスタンスを作ってというやり方もあるようですが、
require_once 'Zend/Validate/EmailAddress.php';
$validator = new Zend_Validate_EmailAddress();
if ($validator->isValid($email)) {
// email は妥当な形式です
} else {
// email は無効な形式です。理由を表示します
foreach ($validator->getMessages() as $messageId => $message) {
echo "バリデーションエラー '$messageId': $message\n";
}
}
$success = Zend_Validate::is($value, $type, $option);を使ったほうが使い勝手が良いかと思われます。
例えば、
< ?phpという基底クラスを作成し、
require_once 'Zend/Validate.php';
abstract class AbstractValidator
{
abstract protected function _getValidators();
public function validate($data){
return $this->_validate($data);
}
protected function _validate($data){
$results = array();
$validators = $this->_getValidators();
foreach($validators as $validator){
$key = $validator['key'];
if(array_key_exists($key,$data)){
$value = $data[$key];
$type = $validator['type'];
$option = $validator['option'];
$success = Zend_Validate::is($value, $type, $option);
if(!$success){
$result = array('value'=>$value,'validator'=>$validator);
array_push($results, $validator['message']);
}
}
}
return $results;
}
}
< ?phpと継承クラスを作成するのはどうでしょう?
require_once 'AbstractValidator.php';
class UserValidator extends AbstractValidator
{
protected function _getValidators(){
$validators=array(
array('key'=>'account','type'=>'Alpha','option'=>array(),'message'=>'アカウントは英数字で入力してください。'),
array('key'=>'password','type'=>'Alpha','option'=>array(),'message'=>'パスワードは英数字で入力してください。'),
array('key'=>'password','type'=>'Between','option'=>array(5,10),'message'=>'パスワードは5文字以上10文字以下で入力してください。'));
return $validators;
}
}
Zend_Validate::isがかなり汎用的なので、後は_getValidatorsで設定を作っていけばほとんどのケースがフォローできていい感じではないかと思います。
Posted in PHP | No Comments
Zend_DBのSQL発行時にエラーになることがあり、実際どのようなSQLが実行されているのかを知りたいケースが結構あります。
Zend_DB_Profireというのがあったので、そちらを使ってみました。
まずは、bootstrap.phpで
$config = new Zend_Config_Ini('db.ini', 'db_setting');
$db = Zend_Db::factory($config->db);
$db->query('set names utf8');
$db->getProfiler()->setEnabled(true);
Zend_Db_Table_Abstract::setDefaultAdapter($db);
として、Profilerを有効にしました。
あとは、Zend_Db_Table_Abstractを継承したAbstractTableModelクラスを作成し、今までZend_Db_Table_Abstractを継承していた各テーブルモデルの継承元をこちらに変更します。
< ?php
require_once 'Zend/Db/Table.php';
require_once 'Zend/Log.php';
require_once 'Zend/Log/Writer/Stream.php';
class AbstractTableModel extends Zend_Db_Table_Abstract
{
protected function _update($data,$where){
$log = new Zend_Log();
$log->addWriter(new Zend_Log_Writer_Stream('sql.log'));
try{
$this->update($data, $where);
$query = $this->_db->getProfiler()->getLastQueryProfile();
$log->log($query->getQuery(),Zend_Log::DEBUG);
}catch(Exception $ex){
$query = $this->_db->getProfiler()->getLastQueryProfile();
$log->log($query->getQuery(),Zend_Log::ERR);
throw $ex;
}
}
}
Updateだけでなくselectやinsert、deleteもメソッドを追加しますが、割愛。
getLastQueryProfileでは最後に実行されたSQLが取得できるので、これをログに出力します。
ただ、「最後に」というのが曲者なのでタイミング的には正しい結果が得られないかもしれませんが、そこはデバッグ時のコードと割り切って使おうと思います。
Posted in PHP | No Comments