Symfony2 note at Apr 20, 2011
前回のDIコンテナの記事から4ヶ月ほど経ち、だいたい今まで書いた記事も役に立たなくなった感じですね。とりあえず最近Symfony2でコード書いてて思ったことをメモしておきます。
Form
1系の鬼門だったFormですが、ずいぶんよくなりました。今度Symfony2勉強会で発表予定。
Security
おそらく2系の鬼門。とりあえずFirewallの流れ。
- URLをベースにFirewallの特定(Firewall, FirewallMap)
- AuthenticationManager (AuthenticationProviderManager) がトークンを認証
- トークンが取得できたらAbstractAuthenticationListenerがSecurityContextにトークンを格納
- anonymousがtrueならanonymousでもOK
- ROLEが1つでも設定されていないとAuthenticatedと見なされない(UsernamePassword)
- EntityUserProviderに指定するEntityManagerはconfig.ymlからは変更不可
- 詳しくは調べていないが、Extensionにて拡張する
- デフォルトだとEntityManagerを再定義しているので、別インスタンスになるのでは疑惑
- FOSUserBundleのInteractiveLoginListenerあたりでおかしくならない?
これでSecurityコンポーネントのAuthenticationの部分だけ。まだAuthorization部分が・・・。
あとSecurityBundleがしんどい。特にDICのSecurityFactory。
Doctrine
- INの対応が残念
- 2.1でsmartなのができるらしい
- order by rand()はできない
- order byに関数が書けない
- selectに関数を書いて、order byで指定ならできる
- rand関数は自前で定義
- Select句にEntityのプロパティ以外を入れると、array(0 => $entity, 1 => $AVG) みたいな配列が返ってくる
- DBから一度取得をしてないと、Entityをpersistしてもinsertにしかならない
- UnitOfWorkをいじればできるみたい
- generate:entitiesにバグ
- 既にクラスファイルがある場合、namespace定義の下にuseが書かれていると既存のクラス内の定義が認識されなくなる
- 自前でクラスファイルをパースしているがかなりの手抜き実装
- パッチかこう・・・