1

プロジェクトの FOSUserBundle を拡張していますが、メール フィールドを一意にしたくないので、schema.xml を拡張して xml から一意のタグを削除し、それに応じてモデルを構築しました。しかし、登録しようとすると、propel.xml を介してメールの一意性がチェックされます。

username_canonical fos_user.username.already_used</option>--> 登録プロファイル

<constraint name="Propel\PropelBundle\Validator\Constraints\UniqueObject">
    <option name="fields">email_canonical</option>
    <!-- PropelBundle does not support custom messages yet
    <option name="message">fos_user.email.already_used</option>-->
    <option name="groups">
        <value>Registration</value>
        <value>Profile</value>
    </option>
</constraint>

その一意のプロパティを一意のオブジェクトに入れたくありません。FOSUserBundle 依存性注入で xml をロードするときに特定のパスが必要になるため、オーバーライドできませんでした

$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));

if ('custom' !== $config['db_driver']) {
    $loader->load(sprintf('%s.xml', $config['db_driver']));
}

foreach (array('validator', 'security', 'util', 'mailer') as $basename) {
    $loader->load(sprintf('%s.xml', $basename));
}

propel.xmlで定義された一意の制約を削除するにはどうすればよいですか?

4

1 に答える 1

0

私はこれに苦労していましたが、質問を投稿した方法のおかげで解決策を見つけました。

重要なのは、独自のバンドルで ValidationPass クラスを拡張し、プロセス メソッドをオーバーライドすることです。リソース>構成>検証の下にある独自のバンドルにも検証xmlファイルをコピーし、代わりにそれらを使用しました。

私がしたことは:

  1. 私のバンドル (src/Example/ExampleBundle/ExampleBundle.php): ビルド メソッドを定義し、独自の ValidatorPass クラスを使用します。
  2. 検証ファイルを自分のバンドルにコピーして変更しました
  3. ValidatorPass ファイルを自分のバンドルにコピーしました (src/Example/ExampleBundle/DependencyInjection/Compiler/ValidatorPass.php)
  4. ValidatorPass プロセス メソッドで、FOSUserBundle xml ファイルを削除し、独自のファイルを追加します

不明な点がある場合は、さらに詳しく説明できますが、これが役立つと思います...

于 2013-02-28T12:11:53.657 に答える