sfGuardPluginの設定続き4:sfAuthUserモデルをカスタマイズする
sfGuardPluginでは、ユーザープロフィールのモデルを拡張できるみたいです(というか、拡張できないとつらい)。ちょっとやってみたら、すぐできました。以下、マニュアルの日本語訳を参考に。
http://code.google.com/p/symfony-doc-ja/wiki/sfGuardPlugin
スキーマを修正
/var/www/podtv/config/schema.yml
propel: sf_guard_user_profile: _attributes: { phpName: sfGuardUserProfile } id: user_id: { type: integer, foreignTable: sf_guard_user, foreignReference: id, required: true, onDelete: cascade } first_name: varchar(20) last_name: varchar(20) birthday: date
CRUDは自分で作らないといけないみたいなので、今回は backendに実装。EditProfileという名前にしました。モジュール名は大文字小文字で区切られているとプログラミングの際に見やすいですが、urlに大文字小文字が入り乱れるのは、個人的にあまり好きじゃないですが、みなさんどうでしょうか?
$ symfony propel-init-admin backend EditProfile sfGuardUserProfile
で、adminジェネレータを使って、データを入力。Createすると、ちゃんと ForeignKeyを見てくれています。
次に、frontendの layoutを変更して、ファーストネーム、ラストネームを表示させます。
/var/www/podtv/apps/frontend/templates/layout.php
<b>会員情報</b><br /> <?php if ( is_object( $sf_user->getGuardUser())){ echo "ようこそ " .$sf_user->getUsername() ."さん<br />"; echo "あなたの first nameは" .$sf_user->getProfile()->getFirstName() ."です<br />"; echo "あなたの last nameは" .$sf_user->getProfile()->getLastName() ."です<br />"; echo link_to('logoutする', '@sf_guard_signout') ."<br />"; } else { echo "ようこそ Guestさん<br />"; echo link_to('loginする', '@sf_guard_signin') ."<br />"; } ?>
サクッと表示してくれました。毎回これぐらいだといいんですが(笑)。