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 Dependecy 注入中加载 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 类并覆盖 process 方法。我将验证 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 回答