PEARサイトがリニューアル

PHPの公式ライブラリサイトpear.php.netのデザインがリニューアルしたようです。

Yahoo UIライブラリを使ってすっきりとしたデザインになったり、パッケージリストなどの更新の自動化が入って細々とした不便な点も改善されているということ。(参考) いい感じです。

PEARサイトの新デザイン

symfonyで、view.ymlで定義したサイトタイトルをテンプレート中から呼び出す方法

view.ymlのdefault/metas/titleでサイトワイドのタイトルを定義しているのに、layout.phpや_header.phpでタイトルを手打ちするのは嫌だなあ、ということで、どこから辿ってview.ymlのデータが取れるのかを探しました。

layout.php等で、

sfContext::getInstance()->getResponse()->getTitle()

を呼ぶと、view.ymlの中のタイトルが取れます。これを<h1>とかに放り込めばOK。

PHPでオブジェクトを配列に変換するにはget_object_vars

いつも関数名が思い出せなくなるけど、どうやって検索したら見つかるかも毎回悩んでしまうので、自分用にメモ。get_object_varsですね。

# 「オブジェクトを配列にする」, “Object2Array”

昨日の、SimpleXMLElementをserializeしてもunserializeで元に戻せない件で、キャッシュでどうしてもserializeを使いたいことから、SimpleXMLElementの中のデータを配列に変換してしまうという方針にしました。

一つずつ取ってきて配列を再構築してもいいんですが、この手の処理はget_object_vars関数を使えばやってくれるので、その方が間違いが少ないと思います。

ただ、get_object_varsは再帰的に配列にしてくれるわけではありません。、SimpleXMLElementの要素の中にまた、SimpleXMLElementがあれば、それはそのまま残ってしまうため、今回の「serializeさせる」という目的ではこれだけでは不十分です。

PHPマニュアルのコメントにも、どうやってrecursiveに変換するか、というコード例がいろいろ出てきています。

今回は、SimpleXMLElementとget_object_varsで調べて出てきたIBM developerworks のPHP で XML をJSON に変換するを参考に、defineをconstに直すなど調整をしたものを使うことにしました。再帰の深さを制限できるようになってます。

PHP Hacksの目次を見ると53. 任意のオブジェクトを配列に変換する、とあるので、これ持ってる人はたぶんここに似たような話が載ってるんじゃないかな、とも思いました。