1. Home
  2. Archive
  3. 第3回CakePHP勉強会にいってきた

第3回CakePHP勉強会にいってきた

第3回CakePHP勉強会に参加してきました。今回は13分で満席になったらしいので参加できて運が良かったです。僕はまだCakePHP暦はあまり長くないので内容が難しいところもありましたけど、CakePHPもっと勉強しよう!という気になりました。とりあえず内容を簡単にメモしておきます。

フェイス女学院 / スパイスボックスラボラトリ 神部さん

†フェイス女学園† (顔診断サービス)

  • 顔診断のところはPHPじゃない別のプログラム
  • flash()で診断中の時間稼ぎして診断してるっぽさを出している
  • 携帯版は/etc/aliasesからcakeconsoleを叩いている
  • CakePHPを使って良かったところ
    • DBの入出力楽
    • ヘッダ、フッタを共通かできる
    • 静的コンテンツも3キャリア分のページをビューとコントローラーを使いこなすことにより最小限に
  • CakePHPで困ったところ
    • 他の人と協業しにくい(Dreamweaverでctpファイルの設定をするのが面倒だったり)
    • コントローラー壊れたら全部壊れる

PakePHPの失敗談 / ブルーオーシャン 岡田さん

スライド

AppController#beforeFilterにログインチェックを書いた

  • ログインが必要なアプリですべてのコントローラーにログインチェックを書いた
  • ログインチェックが不要なアクションを指定しないといけなくなった
  • 派生クラスでbeforeFilter()を実装する場合にparent::beforeFilter()を呼ぶ必要がある
  • AppControllerのbeforeFilter()にログインチェックを書けばすべての派生クラスでログインチェックできると思った
  • クラス継承の利点をわかってなかった
  • CakePHP1.2のAuthコンポーネントを使うことで解決
  • 1.1の場合もコンポーネントを作成したほうがいい

関連するモデルにアソシエーションを動的設定する

  • 多すぎるアソシエーションは重いという先入観から必要に応じてアソシエーションを設定した
  • bindModel()を実行してもアソシエーションが変更されていないという不具合に遭遇
  • hasManyしてる場合
    誤)$this->Review->bindModel()
    正)$this->User->Review->bindModel()

関連するモデルの取得順を動的に設定する

  • データは表示順の変更やフィルタリングすることを考えて、必要に応じて取得条件を背一定する方針で開発を進めた
  • 関連しているモデルの取得順を動的に変更できなかった
  • bindModel()でアソシエーション設定を上書きすることで解決
  • 一度find系を使うともとに戻る

自作ビヘイビアの設定値をインスタンスへ保存する

  • 1.2の登場からモデルの振る舞いを共通化しようとした
  • 同じビヘイビアをアタッチしているモデルで最後の設定しか反映されなかった
  • ビヘイビアの設定値をモデル名の要素の下に保存する
  • $this->__settings[$model->alias][~]で解決

コンポーネントのメンバ変数をstartup()で初期化する

  • コンポーネントの変数をstartup()で初期化するが、初期化したはずのメンバ変数が未定義値になってた
  • startup()の用途を間違えていた
  • この使用になったのは1.2RCから
  • startup()やコンストラクタ以外の場所で初期化する(これらはクローンで初期化するから)
  • C++のトレイトや限定多重継承に近い使い方が正しいみたい

契約プログラミングを導入

  • テストよりも導入をしやすく、確実に品詞とを向上させる仕組みが必要だった
  • isset(),array_key_exists(),is_array(),is_string()を多様するはめになり、可読性がおちた
  • assert()をかくコストを読み間違えた
  • assert()関数の中に式を書いてしまった
  • Setを使う
  • Set::check()で配列のパスを検証
  • Set::extract()で深い配列から目的のデータリストを取得

車輪の再開発

  • レコードをスレッド形式で取得
  • Model:::findAllThreaded()
  • 1.2のバリデーション
  • Authコンポーネント
  • Set::extract()

まとめ

  • 新しい機能を調べるときには想像力を働かせる
  • 面倒がらずに開発コードを読む
  • cakephpを書いているひとたちのことを想像する
  • 最近の開発手法を勉強する(テストとか)

ホッテントリメーカー / Phaさん

CakePHPを使ってよかったこと

  • SQLを書かなくていい
  • mvc,レイアウト、エレメントなどの構造が決められるので楽
  • h,prなどの関数が便利

参考にしているサイトなど

CakePHPゆとり開発環境 / k1LoWさん

スライド

OpenIDをAuthCompornentにトッピングしてみる / ねねとまつさん

スライド

  1. bakeで焼く
  2. PHP OpenID LibraryOpenID compronent for CakePHPを設置
  3. AuthCompornentを使って少し自分でコードを書く(60行くらい)

cakeにテストがやってきた / k-kishidaさん

スライド

テストの手順

  1. simpleTestインストール
  2. testcase書く
  3. テスト実行
  • sinpletestはvenderに置く
  • テストのコードはapp/testsに置く
  • 詳しくはこちら
  • CakePHP1.2のfixtrueを使う
  • テストしやすいところ
    • Model
    • Component
    • Helper
  • テストしにくいところ
    • controller
  • actionにはロジックを書かないほうがいい
  • bugを発見したら失敗するテストを添付してticketを投げるといい

何が違う?CakePHP and symfony / yandodさん

第3回CakePHP勉強会終了&発表資料 - yandodの日記

askeetをCakePHPに移植してみた過程で思ったCakePHPとsymfonyの違いなど

1.DBスキーマの設計

  • askeetには複合主キーが存在するテーブルも
  • cakePHPで複合主キーを扱うのはあきらめる
  • 別の主キーを追加し、ユニークに変更する

2.ファイル、ディレクトリ構成

  • 仮想構造のsymfony フラットな構造のCakePHP
  • 設定ファイルについてもCakePHPでは集約される
  • CakePHPは作業中にディレクトリ移動が少ない
  • symfonyは大量のリソースを階層管理する前提

3.Model

  • 配列をもとに配列が返るCakePHP
  • オブジェクトをもとにオブジェクトが返るsymfony

4.View

  • 配列から値を取得し出力して出力するCakePHP
  • メソッドから値を取得して出力するsymfony

5.Helper

  • クラスメソッドになっているCakePHP
  • グローバル関数になっているsymfony

6.Performance

  • フレームワークの動作速度はcake1.1>cake1.2
  • symfonyはcake1.2より速く、cake1.1より遅い
  • 処理が複雑化してくるとどちらも大差ない結果

7.Query

  • 細かいクエリを分割して発行するCakePHP
  • 素直にjoinを発行するpropel

まとめ

  • 先入観にとらわれずに比較
  • 必要なことができれば方な方を使えばいい
  • 備えている機能のラインナップや方向性は同じ
  • 大事なのはノウハウ、使い方、情報

コメントフォーム

※HTMLタグは使用できません。