フレームワーク3eyes
なんだかいちおうフレームワークが形になってきた。細かいところはまだ時間がかかりそうだけど、大筋で見込みがついた。形から入る、というわけではないけれど名前をつけてウェブも作った。
名前は前から考えてた。短い名前がよくて、意味付けできるようなの。3eyesは文字通り3つの視点(MVC)にわけて開発するためのツールという意味(という意味を後付した・・・)。ウェブはまだ表紙だけ。
公式サイトといえば見栄えするが、所詮は俺俺フレームワークなんだけど。
なんだかいちおうフレームワークが形になってきた。細かいところはまだ時間がかかりそうだけど、大筋で見込みがついた。形から入る、というわけではないけれど名前をつけてウェブも作った。
名前は前から考えてた。短い名前がよくて、意味付けできるようなの。3eyesは文字通り3つの視点(MVC)にわけて開発するためのツールという意味(という意味を後付した・・・)。ウェブはまだ表紙だけ。
公式サイトといえば見栄えするが、所詮は俺俺フレームワークなんだけど。
いわゆるライトウェイトなフレームワーク。現在はguessworkを使用している(かなりカスタマイズして)。いくつか軽量なフレームワークがあるようで、どれもなかなかよくできていると思う。
こういう立派なフレームワークに参戦しようとするつもりはまったくないのだけれど、自分にしっくりくるフレームワークがほしくて一念発起。年末には公開予定。現在はいい感じで開発を進めている。もし誰か興味ありそうな人がいたら連絡を。
今やブログでおなじみになったping送信。しかしXML-RPCという特性上(かどうかは知らないけれど)、ping送信を実現するためのPHPスクリプトのサンプルを提供しているサイトはほとんどない。やっぱり少しだけ敷居が高いためだろうか。
かくいう自分もping送信はよく理解できなかったのだが「案ずるより産むが易し」で、どこからかサンプルを探してきて、試しているうちに理解できるようになった。
ping送信は生のPOSTデータを取り扱うので、一から自分で書くとPHPやWeb、XML-RPCに関する理解が深まるが、やはりお気楽にプログラムを書きたいところ。今まではPEARなどのライブラリを使って書いていたのだが、それでも結局10行以上書かなくてはならなかった記憶がある。
で、革命。Zend_XmlRpcを使うとたった3行でping送信ができる。サンプルスクリプトはこんな感じ。
require_once ‘Zend/XmlRpc/Client.php';
$client = new Zend_XmlRpc_Client($server);
$client->call(‘weblogUpdates.ping’, array($title, $url));
$serverはping送信先URL、$titleにはブログタイトル、$urlにはブログURLを代入すればいい。1行目はライブラリの読み込みなのだから実質2行でping送信ができるわけだ。
これには参った。ほんと、よくできてるよ、Zend Framework。
Zend FrameworkにはRSSを処理するためのZend_Feedというライブラリがあるのだが、これは外部のRSSを読み込んで処理するだけでなく、自サイト内のRSSを生成する、といった場合にも使用できる。具体的には以下の通り。
// 基本的な設定は別途保存しておいて呼び出す
$config=Zend_Registry::get(‘config’);
// RSSのためのデータ作成
$data=array();
$data[‘title’]=$config[‘base’][‘title’];
$data[‘link’]=$config[‘base’][‘url’];
$data[‘charset’]=$config[‘base’][‘charset’];
$data[‘description’]=$config[‘base’][‘description’];
$data[‘author’]=$config[‘base’][‘author’];
$data[’email’]=$config[‘base’][’email’];
$data[‘entries’]=array();
//$rowsはデータベースなどから取得した情報(適宜変更)
foreach($rows as $row){
$data[‘entries’][]=array(
‘title’=>$row[‘name’],
‘link’=>$config[‘base’][‘url’].’/show?id=’.$row[‘id’],
‘description’=>$row[‘message’],
‘guid’=>$row[‘id’],
‘content’=>$row[‘message’],
‘commentRss’=>$config[‘base’][‘url’].’/show?id=’.$row[‘id’],
‘lastUpdate’=>strtotime(date(‘Y-m-d H:i:s’,$row[‘created’])),
);
}
いろいろな方法が取れるとは思うが、とりあえず形になったのでメモだけしておく。
Zend_Configは、設定ファイルを読み込むためのライブラリだ。通常PHPで設定ファイルを用意する際、自分はこんな具合に書いている。
define(‘ADMIN_MAIL’,’admin@example.com’);
define(‘ADMIN_PASSWORD’,’hogehoge’);
define文の列挙だ。これはこれでいいのだが、設定ファイルを素人な方に編集させるのには気が引ける。そんな場合に便利なのがZend_Configだ。Zend_Configにはiniファイル形式の設定ファイルを取り扱うZend_Config_IniとXML形式の設定ファイルを取り扱うZend_Config_Xmlとがある。当然、直感的にわかりやすいZend_Config_Iniを使う。
設定ファイルにはWindowsのiniファイル等でおなじみの書式を使って設定を記述する。
[admin]
mail=admin@example.com
password=hogehoge
[datasource]
db.host=localhost
db.name=hoge
db.user=fuga
上記の設定が書かれたファイルをconfig.iniというファイル名で保存するとZend_Config_Iniを使って以下のように呼び出す。
$configObj = new Zend_Config_Ini(‘config.ini’,NULL);
これだけで、$configObj->admin->mailなんて具合にオブジェクトのプロパティとしてアクセスできるようになる。db.hostみたいにドットで区切られている場合は、$configObj->datasource->db->hostみたいな感じになる。
自分の場合は、オブジェクトではなく、関数を一つかませて、オブジェクト形式から配列形式に変換して使用している。
function _readConfig($configObj)
{
$configs=array();
foreach($configObj as $configKey => $configValue){
if(is_object($configValue) || is_array($configValue)){
$configs[$configKey]=_readConfig($configValue);
}else{
$configs[$configKey]=$configValue;
}
}
return $configs;
}
さらにZend_Registryとセットで使うと「初期設定を読み込んで、共通変数にセット」なんてことがすぐにできる。これも便利だ。