CakePHP2.0でApp::importの代替として追加されたApp::usesで起きた勘違い。

// 使い方
App::uses('クラス名', 'パッケージ名');

// 間違い
App::uses('AuthComponent', 'Controller¥Component');

// 正しくは
App::uses('AuthComponent', 'Controller/Component');

Grahamさんのプレゼンでも名前空間ぽいみたいなこと言ってたしPSR-0の話もしてたから、てっきりパッケージはバックスラッシュ区切りかと思った。

この件についてTipshareにも投稿してみたので良かったらどうぞ。
CakePHP2.0のApp::usesの使い方 | tipshare.info

 

DSC05701

PHP Matsuri 2011 #phpmatsuri に参加してきました。
参加は去年に引き続き2度目で、両方ともスタッフとして参加しましたが、これほどエキサイティングなPHPのイベントは他に無いんじゃないかと思うぐらい楽しめました。
今も余韻に浸っており、頭の中はEpic sax guy 10 hoursで一杯です。

プログラムの最後を飾る大LT大会では、次点賞として「Titanium Mobileで開発するiPhone/Androidアプリ」を頂きました。監修の増井さん(@masuidrive)にサインまで頂いてしまい大満足です。

さて、イベントレポートは後日書くとして、参加者の共通認識的に何かがこみ上げてくるポイントをいくつか紹介します。

参加者を次々と中毒に陥れたEpic sax guy

サブリミナル的に脳髄に埋め込まれたnyancat

Japanese Ninjaが大阪の夜を闇に包んだり

DSC05698

外国人がJapanese Ninjaにおびえてたり

DSC05701

でも仲間になったり

DSC05794

よしおかさん(@hyoshiok)がLTに失敗したり

DSC_0464

まとめ

コタツ(笑)の写真が撮れなかったのが残念ですが大変熱い二日間でした。
来年は福岡(!)開催かと思いますがまたお会いしましょう!

PS,
2日間のイベントレポートはレポート:PHP Matsuri 2011 レポート|gihyo.jp … 技術評論社にアップされる予定です。お楽しみに!

 

すごく違和感のある挙動に遭遇したのでメモ。
例えば、以下のようなhas_manyな関係を持つ2つのクラスがある。

class Parent < ActiveRecord::Base
  has_many :children
  accepts_nested_attributes_for :children
end

class Child < ActiveRecord::Base
  belongs_to :parent
end

Formからネストしたパラメータが渡ってきた場合など、以下のようにする場合が多いと思う。
親データ1件と、その子データ3件を同時に作成する場合。
この場合、p.children.empty?はtrueを返すが、実際にp.childrenを出力すると、期待通りChildクラスのインスタンスが3つ入っている。
しかも、p.childrenを一度出力した後に再度p.children.empty?を呼ぶとfalseが帰ってくるという不思議仕様。

p = Parent.new({
  name: 'parent',
  children: [
    { name: 'child1' },
    { name: 'child2' },
    { name: 'child3' },
  ]
})
p.children.empty?
=> true

p.children
=>[#<Child name:'child1'>,#<Child name:'child2'>,#<Child name:'child3'>]

p.children.empty?
=> false

ちなみに、上記とデータ構造は全く同じだが、一度Parentのインスタンスを作成してから、Childを1つずつ追加していくと、p.children.empty?はきちんとfalseを返し、p.childrenの出力も期待通りChildクラスのインスタンスが3つ入っている。

p = Parent.new({ name: 'parent' })
p.children << Child.new({ name: 'child1' })
p.children << Child.new({ name: 'child2' })
p.children << Child.new({ name: 'child3' })
p.children.empty?
 => false

p.children
=>[#<Child name:'child1'>,#<Child name:'child2'>,#<Child name:'child3'>]

これってlazy loading的な何かがあるので仕方ないですよとか言われたら納得しちゃうかもしれないけど単純にバグな気がするのでちょっと頑張る

© 2011 sanojimaru.com Suffusion theme by Sayontan Sinha