1

sfGuardプラグインのユーザーフォームにカスタムフィールドを追加しようとしています。

データベースに列を作成し、フィールドのウィジェットスキーマを追加しました。フォームに正しく表示され、テキストを追加して送信すると、更新が成功したことが示されます。ただし、フィールドに挿入されたデータはデータベースに入力されません。

新しいフィールドを認識していないため、sfGuardのモデルを更新する必要があると考えています。試し$ ./symfony doctrine:build-modelましたが、sfGuardプラグインのクラスが更新されていないようです。

これをsfGuardUserAdminClassに追加しました:

$this->widgetSchema['department_title'] = new sfWidgetFormInputText();
$this->validatorSchema['department_title'] = new sfValidatorString(array());

フォームフィールドを表示して送信できますが、データをキャッチしてデータベースに挿入しているだけではありません。

アップデート

MyUserオブジェクトを使用してスキーマを更新し、diffを移行して、モデルを構築しました。$this->embedRelation('Profile');sfGuardUserAdminForm.classに追加しました。このエラーが発生します

"Catchable fatal error: Argument 1 passed to sfUser::__construct() must be an instance of sfEventDispatcher, instance of MyUserTable given, called in /Users/careyestes/Sites/sva/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Table.php on line 301 and defined in /Users/careyestes/Sites/sva/lib/vendor/symfony/lib/user/sfUser.class.php on line 46 Fatal error: Call to a member function evictAll() on a non-object in /Users/careyestes/Sites/sva/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1239"
4

1 に答える 1

1

本当にユーザーモデルにフィールドを追加したい場合は、のschema.yml構成を変更する必要がありますplugins/sfDoctrineGuardPlugin/config/doctrine/schema.yml。テーブルsfGuardUserを見つけて、列を追加します。ただし、これはプラグインを更新するのに適した方法ではありません。変更内容が失われます。

1対1の関係でsfGuardUserモデルにリンクされる専用のテーブルを作成するのが最善です。config / doctrine / schema.ymlでテーブルMyUserProfileを作成します:

MyUserProfile:
  columns:
    id: { type: integer, primary: true, autoincrement: true }
    sf_guard_user_id: { type:integer }
    department_title: { type: string(255) }
    # ... other column definitions
  relations:
    User:
     class: sfGuardUser
     foreignType: one
     foreignAlias: Profile
     local: sf_guard_user_id
     onDelete: CASCADE

すべてを再構築した後、カスタムプロパティには次の方法でアクセスできます。

$context->getUser()->getProfile()->getDepartementTitle();

また、生成されたMyUserProfileFormフォームをsfGuardUserAdminFormフォームに埋め込むことができます。

$this->embedRelation('Profile');
于 2012-06-14T09:11:17.040 に答える