CakePHP1.2 RC2
xml データを扱う場合、Controller で下記のようにすると、配列に格納してくれるので、その後の処理がとてもやり易くなります。
uses('Xml');
$file = '/path/to/sample.xml';
$xml = new Xml($file);
$xml_array = Set::reverse($xml);
ここで注意が必要なことがあります。
xml のデータで名前が小文字で始まるものは、値が存在する場合は、そのまま小文字で渡されてくるのですが、値が空の場合は、先頭の文字が大文字に変更されて渡されます。
どうしてこのような現象が起こるかというと、cake/libs/set.php 内の Set::reverse() の処理において、
$key = Inflector::camelize($child->name);
という処理があり、更に cake/libs/inflector.php の function camelize() を見てみると、
function camelize($lowerCaseAndUnderscoredWord) {
$replace = str_replace(" ", "", ucwords(str_replace("_", " ", $lowerCaseAndUnderscoredWord)));
return $replace;
}
という処理がされており、この中の ucwords がアルファベットの先頭が小文字の場合、大文字に変更してくれています。
このままでは、View で受け取る際に 先頭が大文字でくるのか、小文字でくるのかがわからないので不便です。
ですので、対処方法の一つとして、Controller の配列を受け取る際に強制的に Inflector::camelize() を呼び出して、形式を固定してしまえば、View 側でデータがあるなしに関わらず決まった形式で記載することができます。
この投稿への コメント/トラックバック はまだありません...

CakePHPに関する情報をまとめていきます。
開発スピードがアップできればうれしいです。
>>連絡はこちらへどうぞ
CakePHPを中心とした勉強会を無料で開催していますので、これからCakePHPを始めるという方でもぜひお越しください。
>>詳しくはこちらへ(高蔵寺SE勉強会)
CakePHP関連のブックマーク
CakePHP最新版
CakePHP 1.2.3.8166
CakePHPの書籍
CakePHPによる実践Webアプリケーション開発
![]()
CakePHP1.2で作成する人にオススメ。
とても参考になります。
まるごとPHP!(vol.2)
![]()
安藤さんの解説が載っています。
AmazonのPagination部分は参考になります。
CakePHPによるWebアプリケーション開発
![]()
まだ読んだことありません
CakePHPポケットリファレンス![]()
CakePHP1.2 でやるなら、これがあると何かと便利♪
CakePHP徹底入門![]()
CakePHP1.2 を今から始めるならここから
Fast CakePHP![]()
シンプルでわかりやすい CakePHP の入門書
CakePHPガイドブック![]()
CakePHP1.1 ではとても参考にした CakePHP 最初の入門書