Skip to content

sfDoctrineApplyPluginその2

sfDoctrineApplyPluginその2 published on sfDoctrineApplyPluginその2 へのコメントはまだありません

sfDoctrineApplyPluginを動かすまでに結構苦労した。参考にした情報は、主に以下の2つ。

  1. 公式のREADME
  2. このページ(英語)。

以下、自分がやった方法を書くが、バージョン依存の点も結構ありそうなので要注意。

■まずは環境

  • symfony 1.4.3
  • sfDoctrineApplyPlugin 1.1.1

 

■テーブルレイアウト

 2.のページにはREADME通りだと上手く行かないと書かれているが、結論からするとそのままで問題なかった。念のため、以下にschema.ymlを抜粋して記載。

sfGuardUserProfile:
columns:
id:        { type: integer(4), primary: true, autoincrement: true }
user_id:   { type: integer(4), notnull: true }
fullname:  { type: string(80) }
email:     { type: string(80) }
validate:  { type: string(17)  }
relations:
User:
class: sfGuardUser
local: user_id
foreign: id
type: one
foreignType: one
foreignAlias: Profile
onDelete: CASCADE

fullnameで一つのフィールドって言うのはセンスなさ過ぎってつっこみは2.のページにも沢山入ってるが、とりあえずは今後の課題に残しておいて次に進む。

■Zend Frameworkを使わないようにソースを修正

 基本は2のページの「3. Getting rid of Zend_Mailer」の手順+そこよりもう少し下にある「createGuid()」をコピペするだけ。

英語が全くダメな人向けに一応書くと、apps/frontend/modules/sfApply/actions/action.class.phpでsfApplyActionsを定義(BasesfApplyActionsを継承)する。で、その中に以下の3つのメソッドがある形になる。

  • executeApply
  • mail
  • createGuid

■メールの設定(必要に応じて)

factories.ymlより抜粋。設定の仕方はこのページが参考になった。

mailer:
class: sfMailer
param:
logging:           %SF_LOGGING_ENABLED%
charset:           %SF_CHARSET%
delivery_strategy: realtime
transport:
class: Swift_SmtpTransport
param:
host:       192.168.1.2
port:       25

■モジュールの有効化、routing.ymlへの追記

この辺はREADME通り。

settings.ymlに以下の記述。

enabled_modules:    [default, sfGuardAuth, sfApply]

routing.ymlもREADME通り。

■権限の設定

今までので大体動きそうな気がするんだけど、sfApply/applyにアクセスするとログイン画面に戻されてしまう。ユーザーアカウントを作るための画面にアクセスしようとしてログイン画面に飛ばされるなんておかしい。ログを確認すると以下のようなのが。

5 03 18:27:33 symfony [info] {sfBasicSecurityFilter} Action "sfApply/apply" requires authentication, forwarding to "sfGuardAuth/signin"

うーん、これに関しては参考にした2つのページでは一言も触れられていなかったので、もしかしたら自分のインストールがどっかおかしいのかもしれないけど、とりあえずsecurity.ymlに以下のような記述を追加した。

apply:
is_secure: false
confirm:
is_secure: false
all:
is_secure: true

以上でとりあえず動作するようになった。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です