読者です 読者をやめる 読者になる 読者になる

モノノフ日記

普通の日記です

symfony勉強会/懇親会に参加してきました

5/15に開催されたsymfony勉強会/懇親会に参加してきました。会場を提供してくださった株式会社ディノさんいつもありがとうございます。

勉強会中の主なトピックスは1.2で変更された部分の話がやっぱり多かったですね。自分は1.2はJobeetでいじりながら、適当に遊んでるレベルなのでもっと使わないとなと身にしみました。あとsymfonyは今後、どのコンテンツも全てクラスベースの概念を使って拡張していく方針になるような気がするからOOPの理解が深めれるフレームワークとしてもウリになるかもしれないなとか感じました。

懇親会ではこんな感じの話題で盛り上がっていた記憶があります。

  • sfFormは慣れれば便利
    • メンテナンス性は疑問がある
  • symfony1.2を実践投入しているところは少ない
  • 最近デスマ
    • それに付随してクライアントが云々
  • 男の子牧場やろうよ!
  • カヤックの名刺カッコイイ

かなり睡眠不足だったので、懇親会はちょっと早めに帰ったんですが帰り際にカタンネタで盛り上がってるのちらっと聞こえて、激しく気になりながら帰宅しました。

以下、勉強会中にメモったことをそのまま載せておきます。発表者の方がすでに資料公開してくださっているので各資料記事へのリンクも一緒に書いてます。

sfWebDebugToolbarを拡張してみる

sfWebDebugToolbarの内部
  • Symfoniansおなじみのツール
  • symfony1.2からそれぞれのパネルがクラス化
  • sfWebDebugPanel
    • 抽象クラス
      • 基本これを継承して拡張
    • 既存クラスを拡張するときは既存のクラスを拡張すればおk
  • sfWebDebugPanelTimer
    • 処理時間を表示するパネル
  • sfTimerManager
    • sfTimerの管理用クラス
sfWebDebugToolbarの拡張方法
  • 基本的なことはcook bookに
    • 日本語訳もされてる
  • sfEventDispatcherを使用
  • カスタムメソッドを生成する
    • 今回はconfigureWebDebugToolbarという名前
    • sfWebDebugというオブジェクトを返してくる
      • このオブジェクトを使ってパネルのカスタマイズを行う
      • パネルで表示する情報はsetPanelContentメソッド内でHTMLを組み立てて返す
        • 直にやると結構泥臭い作業になっちゃう
          • ヘルパー使って構造化すれば対応できそう
          • symfony側からは特に何も提供されておらず

symfony1.2のイベントを使ってみた

symfonyの拡張
  • Core部分を拡張
    • これはやっちゃダメな例
    • アップデート時に嵌る
symfonyの拡張方法
  • Filter
  • 自前クラス(factories.yml)
  • Mixin( 1.0.X )
  • Event( 1.1.X )
Event
  • Mixinでやってたこと+αができるようなもの
  • オブザーバーパターン
    • PEARでいうEvent_Dispatcher
  • sfEventDispatcherを通して
    • イベント(sfEvent)を登録
    • イベントのリスナー(connect)を登録
    • イベントが呼ばれるとリスナーを実行する
Eventの種類
  • Notify
    • リスナーを順次実行
  • NotifyUtil
    • trueを返すまで実行
  • Filter
    • 指定フィルタを実行
拡張例
  1. 用意されているイベントを調べる
  2. リスナーを登録する (in configuration file)
  3. リスナーを実装
    • sfEventがわたってきて、getSubjectして例外クラスを取得
    • trueを返すとイベントが終わるのでreturn false
  • フィルタの登録も可能
  • Mixinのようにメソッドを追加することも可能
symfony2ではEventを多用
  • RequestHandlerがフィルタにとって代わりそう

ルーティングを使ってシンプルなアプリケーション開発を

レコード取得をアクションでやらない
  • ObjectRouteを使う
    • sfPropelRoute or sfDoctrineRoute
アクション名やバリデーション処理の共通化
  • sfRouteCollectionを使う
  • アクション内に書く絶対的なコード量は減らせる
    • (個人的に)メンテしやすいかと言われると微妙な気もした
気づいたこと
  • symfonyの標準のmodule/actionでアクセスするとrouting.ymlルールはすり抜けちゃう
    • 1.0と同じ仕様と思う

sfMobileIPPlugin作った

  • btoさん
sfMobilePPluginとは
IPアドレス帯の定義
  • yamlファイルで定義
連続IPアドレス帯を結合
32ビット整数で表現
  • 比較するとき簡単なif文でできるのでこっちのが楽
事前処理をキャッシュ
理論ベンチ
  • 逐次検索150回に対して
  • MobilePPluginは6回
    • log2(50)