jQuery/CakePHP1.3 もういやになるほど Invalid JSON とか見た件

いやハマった、2日も悩んでた。


サーバ側からjson形式でDBで取得したデータを返却する処理を組んでいたが、全く上手くいかなかった。


返却するデータの形式がjson形式じゃないのか?と思ってサーバ側のデータをprint_rしてブラウザで確認しても別段おかしいところはない。全然エラーっぽそうなところは無いのに、$.ajaxでデータを取得してみると、ことごとくerrorコールバックに飛ばされ、Invalid JSON…。


散々見直したところ、原因はcakephpのfind(all)の戻りデータがなんだかおかしな動きをしている。
print_rで見たところ、要素数が4つで、添字0〜3とあるはずのテーブルに、for文(訳あってforeach文で書いてない)で3番目の配列を参照すると落ちている。おかしい、確かに添字が数値で3番目であるはずなのに…。foreach文だと上手くいく、なぜか。


そのほか、find(all)で取得したデータは同階層でないと”データが見つからない”といった趣旨のエラーが出力されたりした。


どうにか動くようにはなったが、どうも腑に落ちない。jsonPHP記述の作法でもあるのか?作り方が悪いのかな?インターネット上では、Jsonのクライアント側の実装はたくさんあるんだけど、サーバ側の実装サンプルってほんと少ないよなぁ。

CakePHP1.3 CakePHPでincludeとかrequire_onceとかできるの? の件

忘備録

あるcontroller中のメソッドがやけに多くなってきたので、外部ファイルに出してすっきりさせようとしました。

とりあえずパッと思い浮かんだのがincludeなんですが、そういやCakePHPってincludeとかrequire_onceできるの?と、思って調べたんですが、当然のごとくできました。




簡単な方法まとめ
【controller中で独自定義した外部関数を呼び出す】

●1 外部ファイルを プロジェクト名/app/vendors/ 以下に作成する

	// プロジェクト名/app/vendors/hoge.php という名前で下記の内容を作成。

	function tasu($a,$b){
		return $a+$b;
	}

●2 呼び出し元controllerで、以下のように呼び出す

	function index(){
	
		//独自ファイルの読み込み(作成したファイル名を第2引数に)
		App::import('vendor', 'hoge');
		
		//結果に 6 と表示される
		echo tasu(3,3);
	}

と、外部関数を呼ぶだけならこれでおk。勿論、外部クラスの読み込みも可能。
また、ファイル名は全て小文字で描かないと駄目な模様。
http://planetcakephp.org/aggregator/items/1189-phpcakephpappimport-の注意点





●以下調べ物
もっと分かりやすい説明
http://www.slideboom.com/presentations/69602/10分で分かるApp%3A%3Aimport()

ファイル名の読み込み方法色々、配布されてるライブラリなどはちゃんと名前指定しないと駄目そう
http://www.garacter.com/notes/CakePHP+Note:各種クラスやファイルの読み込み/pi:293

本家サイト
http://book.cakephp.org/ja/view/538/Loading-Vendor-Files





●おまけ
include、require_onceって今まであまり気にせずに使ってました、勉強不足ですね…
http://d.hatena.ne.jp/taiju1225/20080505/1209945636

CakePHP1.3 controller中のprivate表記って微妙じゃね?と思う件

忘備録 
controller中のメソッドは通常publicだけど、外から呼ばれたくない(アクセスされたくない)場合以下のようにする。

	//外部からは呼ばれない(http://〜/fugaのアクセスは全て拒否)
	function __fuga(){
	
		echo "俺は呼ばれない!";
	}
	
	//外部から呼ばれる(http://〜/hogeでアクセス可能)
	function hoge(){
		//アクション中で呼び出すことは可能
		$this->__fuga();
	}

_(アンダーバー)1個でprotected、__2個でprivateとなるが、コントローラでprotectedって使わんでしょ、ということでprivateだけ憶えておけばよさそう。
CakePHPフレームワーク自体もこのアンダーバー表記が多用されていました。





下記の通り、アンダーバーを使わずに書いてもOK

	//外部からは呼ばれない(http://〜/fugaのアクセスは全て拒否)
	private function fuga(){
	
		echo "俺は呼ばれない!";
	}
	
	//外部から呼ばれる(http://〜/hogeでアクセス可能)
	function hoge(){
		//アクション中で呼び出すことは可能
		$this->fuga();
	}



で、ここからが疑問
メソッドがアンダーバー表記で可視性を定義できるなら、変数も当然できるよねと思いきやこれは出来ない。

	//OK
	private $hoge;
	
	//コンパイルエラー
	//__$hoge;

なら全部privateとかprotectedとか書いたほうが分かりやすくね?
あるいは全部アンダーバー表記の方法を実装してほしいと思うんだけど。
なんだかなぁ。



参考にしたサイト
http://cakephp.jp/modules/newbb/viewtopic.php?viewmode=thread&topic_id=705&forum=8

深海魚 メキシコ湾で新種の魚、原油で危機

メキシコ湾で新種の魚、原油で危機
http://www.nationalgeographic.co.jp/news/news_article.php?file_id=20100712001&expand

>>ヒメグツ属
なにそれ?初めて聞いた…。アンコウみたいな感じだけど違うのかな。

サマーソニック2010の件 PENDULUM

書くことが無いときはサマーソニックの事を書くと決めたので今日はサマーソニック

2番目のお目当てPENDULUM。

なんか他バンドのリミックスばっかしてるような印象ですが、本人達のアルバムもとてもカッコいいのです。
有名なリミックスだとProdigyのVoodoo Peopleのリミックスでしょうか。

あぁ、相変わらず痛そうなPVだな…



08年のライブ見てて思ったんですが、MCの煽りが面白いんですよね。つうか何も楽器弾いてない。Happy Mondaysのベズ…よりは役に立ってる感じの立ち位置。


おすすめの曲をば

Pendulum - Spiral