CakePHP2.0で配列をXMLに変換し出力する
notoです。
今回もまたCakePHP2.0を引っ張ります。 CakePHP2.0では、XMLヘルパーがなくなり、RSSヘルパーが追加されました。しかし、簡単なXML形式のレスポンスを返したいんだよ!と思い、すこし調べてみました。
動作環境
- CakePHP 2.0.4
- PHP 5.3.8
- CentOS 5.6
XMLを出力する
まずはコードです。 xml用のレイアウトを作成します。
1
|
|
XMLを出力するだけなので、ビューで渡されたデータをそのまま表示させます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
コアライブラリのXMLクラスを利用して配列をXMLオブジェクトへ変換します。 1.3との違いはドキュメントに記載しているコードがわかりやすいと思うので、引用します。
1 2 3 4 5 6 7 8 9 10 |
|
2.0ではXMLオブジェクトの静的メソッド「fromArray」に配列を渡すことで、SimpleXMLElementもしくはDOMDocumentを返却します。
デフォルトではSimpleXMLElementを返却しますので、DOMDocumentを返却させたい場合は、以下のようにオプションでDOMDocumentを返却するよう指定する必要があります。
1
|
|
最後にビューになります。 コントローラーから渡されたデータを出力するだけですね。 ビューから先ほど作成したレイアウトを指定しています。
1 2 3 |
|
実行結果
1 2 |
|
DOMDocument not foundが発生する場合
php-xmlをインストールしましょう。 XMLを出力する為に、この書き方でもいいのですがカッコ悪いので簡単なヘルパーを作成します。
XMLヘルパーの作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
レイアウトの指定と、配列からの変換はXMLヘルパーに任せます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
先ほど作成したXMLヘルパーを指定します。変換処理はビューにお任せです。
1 2 |
|
ビューではXMLヘルパーのrenderメソッドを呼ぶだけです。 最初のコードよりはスマートになりましたね。RSSヘルパーでも似たようなことができるかもしれないですが、未確認です。。。
ヘルパーをあまり作成したことがないので、間違いやこうしたほうがいいよ等コメント頂けたら幸いです。