Model->bindModel()

アソシエーションの定義は、最低限しか書かず、必要になったときに動的に追加することができる。とはいえ、つい忘れてしまうのでメモ。

class User extends AppModel{
  function getAll(){
    $this->bindModel(array('belongsTo' =>array('Company')));
    return $this->findAll();
  }
}

上記は belongsTo の例です。
hasOne や hasMany も同様にできます。


ちなみに、bindModel の逆は unbindModel で、アソシエーションの動的解除ができます。

第5回 CakePHP IRC集会に参加した

昨夜行われた第5回 CakePHP IRC集会に参加しました。
codecheck.in

IRC自体が初めてだったので、戸惑いがあったものの、とても楽しく参加できました。

話題に上ったのはこのあたりです。id:cakephperさんが、あとで素敵にまとめてくれると思うので簡単に。


次回も是非参加してみたいです。

PHPカンファレンス2009

快適な環境

ちょっと遅刻して到着。
鈴木さんの挨拶の途中で入室しました。
遅刻して申し訳ありません。

会場のORACLEセンターは快適で、電源もあるし無線LANも使える!
テーブル席の空いている前のほうに席を確保しました。

NetCommons

機能がたくさん!
確かにこれだけあれば足りそう。
新規に機能開発する気が起きないのもうなづける。
「国産」嬉しい:)
フレームワークMapleを使ってる。

WordPress

導入事例の多さやデザイン性、活発なバージョンアップをアピール。
.comで大量のアクセスを捌くのはmemcachedなんかを使ってるが公開されていない。

eZPublish

高機能・高セキュリティ。エンタープライズ=法人向け。
API利用で連携できるシステムが多い印象。
出版系、政府系の導入事例が多い。
プロジェクト管理ツールをリリース予定(1月)
eZいろいろできて面白そう。

Oracle

挙手でMySQL利用8割、ORACLE利用1割くらい。
PHP高評価。ORACLE内にPHP専用サイトがあるらしい。
安いのもある!
 ・SE1でもEEと機能は同じ。開発ライセンスは無償(サポートは別)
 ・XEなら無償&商用利用可。制限有るが、DB機能は同じ。
無償でセミナーを開催している。
OracleのAMIイメージがある。oracle-corpで検索すると約10件登録されてる。

AWSを使ったデモ実施。
イメージがあっても起動に時間がかかる。(たぶん10〜15分?)
GUIでDB操作が可能だが、localhostでない場合、最初だけコマンドラインで呪文が必要。

ORCLEのライセンスは使い回しが利く。
(既存のライセンスをクラウドに移行して利用が可能)

GREE

インターネットサービスのプロモーションは前例がなく苦労。
PCターゲットではなく携帯ターゲットを強く意識。
総会員数昨年554万人、今年1260万人。
収益大事(2009年6月期の4Qは売上高の半分が営業利益)

モバイルへの仮説
・2006年当初に2010年のビジョンと3つの仮説を構築
 5年先を考えて未来のユーザに向けて作る
・ネットの利用はPCからモバイル中心になる
 DSやPSPのように、携帯型が中心になる
・コミュニティサービスがネット利用の中心になる
 使いやすい・楽しいの定義が変わっていく
・コミュニティがコンテンツを融合する
アプリ設計思想
・短時間でも長時間でもできる
・初心者でも、ヘビーユーザも楽しめる
・一人でも楽しく、複数でもより楽しい
・無料でも有料でも楽しめる
・すべての年齢・性別に受け入れられる
・数百万・数千万人が使えるシンプルさを保つ
・リアルでもバーチャルでも混在して使える
・継続して開発、改善し続けられるチーム力が最も重要

ん〜〜〜。納得できる面もあるけど違和感が残る。
PHPとの絡みはどこに???

安全なWebアプリケーション開発のための、発注・要件・検収

セキュリティ要件は誰の責任?(発注者?)
経産省で「セキュリティ要件が仕様に盛り込んであれば瑕疵として扱う」というような記述があるらしい。
リスク分析は手間の割りに効果が少ない

  • >「対策を選ぶ」アプローチが効果的

リバース・リスク・アクセスメントの勧め
アンチウィルスソフト導入のためwindows案件が増えてる傾向(?)
脆弱性対策は、開発標準に盛り込むのがよい->ベンダー開発標準が重要
#とはいえ、責任は仕様の範囲。
セキュリティ仕様とセキュリティバグを分けて考える!!

開発標準と教育が大事。

開発標準の参考になりそうなもの
・安全なウェブサイトの作り方 改訂第3版
・発注者のためのWebシステム/Webアプリケーションセキュリティ要件書

echoの実例。(PHPコード!)
CakePHPのh()は本当に便利。あの長いのは打ちにくい。。。

テストを見越して実装が必要。(でも難しい)
テストにコストがかかる。それでは、どうやればコストを下げられる?
=>ウェブ健康診断の紹介
 テスト項目(仕様)が参考になりそう
 診断ツールもあるらしい
SQLインジェクションのテストはORではなくANDを使う。

専門家に依頼すると高いので、できることは自分で!
業界標準といえるものはまだない。。。

複数のDB使用時の/app/tmp/cache/models

CakePHP が持つキャッシュ機構。
テーブル定義がキャッシュファイルとして、/app/tmp/cache/modelsフォルダに作成される。

core.phpに定義するdebugレベルによって、キャッシュの有効期限が変わり、debug=0の場合はtable変更を行っても反映されないという記事をいくつか見かけた。
この場合は、キャッシュファイル(/app/tmp/cache/models/配下)を削除する事で、新しいtable定義に沿ったキャッシュファイルが作られて解消させることができる。



さて、複数のDBに接続したシステムの場合。
マスタとスレーブのDBがあり、更新系はマスタDBに接続し、参照だけの場合はスレーブに接続するようなパターン。(DB切り替えには、useDbConfigを使ってます)


キャッシュファイルには、2種類が存在します。
1つはdatabaseのキャッシュであり、そのdatabaseに存在するtable情報がキャッシュされます。(ファイル名にdatabase名が使われる)
もう1つはtableのキャッシュであり、そのtableのカラム情報がキャッシュされます。(ファイル名にtable名が使われる)


そこで、マスタとスレーブのDBを利用するような場合、存在は別DBですが、レプリケーションの関係で同じ名前にしていると。。。


キャッシュファイルが1つになってしまいます。
実態は別DBなのですが、作成されるキャッシュファイル名がtable名に依存しているため、作成されるキャッシュファイルが重なる事になります。デバッグ文を見ると、片方のdatabaseにのみDESC文が発行されています。マスタとスレーブという関係のため、テーブル定義は同じなので問題がないかに思えるのですが、気持ち悪い。。。



できれば、別々にtable定義をキャッシュしてほしいと思うのですが、cake配下を触らずに解決できる方法はないものでしょうか?

第4回CakePHP勉強会@Tokyo 感想

書くのが遅くなりましたが、前回第4回CakePHP勉強会@Tokyo - Do you CakePHP はてな書いたとおり、5月22日に参加してきました。
第4回CakePHP勉強会@Tokyo - events.php.gr.jp
第2回、第3回と参加してたので続けて3回目の出席でした。

開始前の様子


開始10分ほど前に着いた時の様子です。
席はほとんど埋まっていました。

candycane

id:yandodさん
思いつきで開発開始→開発合宿→現在進行中。
アルファテスター参加します。
魔法の杖欲しいです。
おまんじゅう美味しく頂きました(^^)

Ktai Library

MASA-Pさん
携帯開発は大変だという話を聞いています。
キャリア対応が特に。絵文字とか文字コードとか。。。
ポイントは「1つのviewで」

routes.php

id:akiyanさん
完全マッチのみだからハマることがある。
ワイルドカードを使うときは要注意。
逆ルーティングができるとは知りませんでした。
すぐにでも使えそう!
資料の公開をお待ちしています。

ここからLT

CakePHP1.3

id:cakephperさん
1.1から触り始めて、まだ1.1を触っている身としては、どんどん進化してる!置いてかれてる!と焦ってます。
JsHelperとかExplainとか期待してます。
新しいバージョン情報の発信ありがとうございます。

phpUnderControl

id:miauさん
使っているツール(マインドマップみたいな)が格好良いです。
レポート眺めてニヤニヤしてみたいです。

ImageGraph

自分の発表です。
一番軽い内容だったな、と、周りとのレベルの差に恥ずかしくなってました><
「renderをfalseにする」akiyanさんツッコミありがとうございます!

Behavior

matsuuraさん
ソフトデリートとか、公開期間制御とか、実用的ですぐ使えそうです。

ここからは懇親会の中でLT

プラグイン三段活用

id:slywalkerさん
コピペしてはいけないけど、ついやってしまって陥る罠。
タメになるだけでなく、聞いていて楽しかったです。
発表初めてとは思えない!関西でも頑張ってください。

App::import

shin1x1さん
今、最も熱い(?)大阪から参加!
Cake下を触らずにオーバーロード。使い道がありそうです。
トークイベント楽しみにしてます;)

CakePHP IRC集会

id:cakephperさん(再登場)
存在は知ってたのですが、参加したことがなくてすみません。
夜8時はキツイです。。。


まとめ

懇親会の中でのLTはとても盛り上がりました。
さすが関西パワー(?)
終電が気になったため、LTが全て終わったところで帰りました。
おまんじゅうだけでなく、お土産まであって驚きました。

次回も期待しちゃいます;)


それにしても、発表してみたけどネタが悪かったかなぁ。。。
もっと勉強しておかないと。

第4回CakePHP勉強会@Tokyo

すっかり放置していました。すみません。


第4回CakePHP勉強会@Tokyo
久しぶりに、勉強会に参加したいな〜と思っていましたが、参加受付のタイミングが合わず(汗)一旦は諦めたのですが、LT枠が残っているので何かネタがあるかな?と思い出しつつ、運営の id:yandod さんにメールをしてみました。


どうやら枠に入れた模様。。。


でも、大丈夫か?>私