2008年03月24日(月)
URLからアクション名、テンプレートファイルへのマッピングが変わってるっぽく(デフォルトでは)、「アクションが見つかりません」エラーが多発。そもそも、複数単語のアクション名をアンダースコアでつないでたのが悪いのですが、そこをハイフンになおさなきゃいけなそう。
1.0.xでは、
URL: /game/detail_map
の場合、
Controller: Game
Action:detailMap
Template:detail_map.html
でいけてたが、
1.5では、アンダースコアでつなぐと単純にアンダースコアが削除された文字列がアクション名になるので、
1.5では、
URL: /game/detail_map
の場合、
Controller: Game
Action:detailmap
Template:detailmap.html
となってしまう。
そんなわけで、ハイフンでつなぐ記法に修正することにしました。
そうすれば、以下のようになるはず。
URL: /game/detail-map
の場合、
Controller: Game
Action:detailMap
Template:detail-map.html
2008年03月5日(水)
Zend_MailとSmartyを組み合わせた、メール送信のクラスを作ってみたのですが、
どうも長いタイトルのメールを送ると、タイトルの途中に「?」が入るからソースを見てみたら。
-
public function setSubject($subject)
-
{
-
if ($this->_subject === null) {
-
$subject =
strtr($subject,
"\r\n\t",
‘???’);
-
$this->_subject = $this->_encodeHeader($subject);
-
$this->_storeHeader(‘Subject’, $this->_subject);
-
} else {
-
throw new Zend_Mail_Exception(‘Subject set twice’);
-
}
-
return $this;
-
}
って、おい。
そりゃ「?」になるよ。
ググったら、ふらっとさんのページやいしなお!さんのページに同じことが書かれてました。
_encodeHeaderメソッドとかを見るとやりたいことはわからないではないが、
いずれにしても日本語(に限らないようだけど)送るときに困っちゃいます。
RFCでいうとこの辺か。
RFC 2822 (Internet Message Format)
RFC 2047 (MIME Part Three:Message Header Extensions for Non-ASCII Text)
とりあえず、RFC 2822の「SHOULD be no more than 78 characters」この辺の、”・・べき”は、
見なかったことにして、かつ長すぎる(符号化後の半角換算998文字)タイトルは考慮しないってことで、
いしなお!さんのとこのように、改行は削除する仕様にしちゃいました。
2008年02月29日(金)
PHPのフレームワークを自分用メモ。 以下、主なPHPのフレームワーク。
- Symfony
- Zend Framework
- CakePHP
- http://cakephp.org/
- PHP4 / 5 (5対応というより、5でもエラーが出ないという感じで、プログラム自体が5でかかれている訳ではない。)
- The MIT License
- ケーキ(Cake)を焼けたり(bake)、名前の付け方がちょっとおもしろい。
- ちょっとしたWEBアプリを作るにはよさげ。
- Ethna
- Piece Framework
以下、現在はたぶん開発が停止している。
- Maple (和製。DIコンテナとか)
- Mojavi (一時期流行った。ダミーのホームページが復活してるみたい・・リンク押せないけど http://www.mojavi.org/)
- Agavi (Mojaviの派生。Railsとは違った方向に進んでたが)
2008年02月11日(月)
個人的にお遊びサイトを開発中(ポンティ)なのですが、
ふとタグを入れて投稿したらhtmlエスケープされてない・・・。
駄目駄目じゃないっすか。
普段、標準でエスケープされるフレームワークを使ってて、
久しぶりにSmartyを使ったもんだから、
Smartyってデフォルトでエスケープされなかったっけ?
と思ってしまいました。
Smartyにdefault_modifiersってのがあるようなので、
それでもできそうですが、なんかめんどくさそうだったので(http://blog.asial.co.jp/309)、
assignの時にエスケープするようにしてみました。
フレームワークはZend Frameworkを使ってて、Smarty用Viewの具象クラスはもちろん作ってたので、
そこに手を加えてみました。
Zend FrameworkでSmartyを使う方法などはZendのドキュメントなどを参照のこと。
-
require_once ‘Zend/View/Interface.php’;
-
require_once ‘Smarty.class.php’;
-
-
class Pontiy_View_Smarty implements Zend_View_Interface
-
{
-
protected $_smarty;
-
-
// 大部分省略してます
-
public function assign($spec, $value = null)
-
{
-
-
$spec = $this->h($spec);
-
$this->_smarty->assign($spec);
-
return;
-
}
-
$value = $this->h($value);
-
$this->_smarty->assign($spec, $value);
-
}
-
-
public function assignNoEscape($spec, $value = null)
-
{
-
-
$this->_smarty->assign($spec);
-
return;
-
}
-
$this->_smarty->assign($spec, $value);
-
}
-
-
private function h($string){
-
-
-
}else{
-
-
}
-
}
-
-
}
hメソッドは関数でよいのだけど、基本関数群を置く場所を考えてなかったので、
とりあえずクラスの中につっこんでしまいました・・・。