Skip to content

sfGuardUserとプロファイルテーブルを関連づける

sfGuardUserとプロファイルテーブルを関連づける published on sfGuardUserとプロファイルテーブルを関連づける へのコメントはまだありません

symfony 1.1を使っていた時に、sfGuardPluginについてのエントリーを書いた。sfGuardUserテーブルにはログインID、パスワードくらいしか情報が無くて、本名やメールアドレスなどのフィールドは別テーブルを作って1:1のリレーションをさせなければいけないという内容。

symfony 1.4でsfDoctrineGuardPluginでも基本コンセプトは一緒なんだけど、このページ(英語)に従ってやったら非常に簡単にできた。概略は以下の通り。

  • schema.ymlにプロファイルテーブル(Profile)を追加し、sfGuardUserと関連づける
  • sfGuardUserのfixtureを修正
  • symfony doctrine:buildでテーブル、モデル、フォームを作成
  • sfGuardUserAdminForm.class.phpを修正し、プロファイルのフォームも読み込む
  • generator.ymlを少し修正

一点注意。多分、schema.ymlのsfGuardUserとProfileの外部キーの所で、onDelete: CASCADE が必要な気がする。

※その他、sfGuardPlugin関係のtipsをまとめたページがあった。というかこっちのページを先に見つけた。そこで、2つのテーブル(sfGuardUserとsfGuardUserProfile)を関連づける方法は書いてあったけど、1つの画面で編集できるようにする方法は載ってなかった。

■環境

symfony 1.4.3

sfGuardPluginとDoctrine

sfGuardPluginとDoctrine published on sfGuardPluginとDoctrine へのコメントはまだありません

■symfony 1.4はDoctrineがデフォルトORM

最近またSymfonyでアプリを作ってる。前回触ってから1年以上。その間にバージョンなどに大きな変化が…IT業界、時代の流れに付いていくのだけで大変。

さて、symfony 1.4ではDoctrineがデフォルトのORマッパーになったらしい。以前触っていた1.1ではPropelがデフォルトでDoctrineというのは名前だけしか聞いたこと無かったんだけど、今回せっかくなんで使ってみることにした。

ちなみに、symfony 1.4でPropelを使うには、一番簡単なのはプロジェクト作成時にORMにPropelを指定すること。このページ(英語)に載ってた。

■sfGuardPluginはPropel用、らしい。

sfGuardPluginはPropel用だというのを知らずにインストールしたら、当然何も動かない。アンインストールしようとすると以下のエラーが出る。

# symfony plugin:uninstall sfGuardPlugin
Fatal error: Class 'sfPropelBaseTask' not found in C:pathtoprojectnameapplicationpluginssfGuardPluginlibtasksfGuardAddGroupTask.class.php on line 20

解決方法としては、c:pathtoprojectnameapplicationpluginssfGuardPluginlibtask フォルダーを削除してから、uninstallコマンドを実行する。

英語だけど全く同じ質問がgoogleの掲示板みたいなのにあった。

■Doctrine用にはsfDoctrineGuardPlugin

sfDoctrineGuardPluginってのがある。sfGuardPluginには劣ってるみたいな古い書き込みも見つけたけど、Symfony 1.4はDoctrineがデフォルトになったんだから、sfDoctrineGuardPluginも結構改善されているはず、と期待しつつ使用開始。