Symfony覆盖第三方捆绑验证

时间:2017-10-02 12:33:24

标签: php symfony validation

如果我要扩展第三方软件包的实体,如何使用注释更改/覆盖特定属性的验证(保持当前验证不变)?

感谢。

编辑:在这种情况下,我将覆盖FOSUserBundle并在此处设置验证vendor/friendsofsymfony/user-bundle/FOS/UserBundle/Resources/config/validation.xml

<?xml version="1.0" ?>
<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping
        http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">

    <class name="FOS\UserBundle\Model\User">

        <property name="username">
            <constraint name="NotBlank">
                <option name="message">fos_user.username.blank</option>
                <option name="groups">
                    <value>Registration</value>
                    <value>Profile</value>
                </option>
            </constraint>  vendor/friendsofsymfony/user-bundle/FOS/UserBundle/Resources/config/validation.xml
            <constraint name="Length">
                <option name="min">2</option>
                <option name="minMessage">fos_user.username.short</option>
                <option name="max">255</option>
                <option name="maxMessage">fos_user.username.long</option>
                <option name="groups">
                    <value>Registration</value>
                    <value>Profile</value>
                </option>
            </constraint>
        </property>

    <!-- other -->
    </class>
</constraint>

如何为此类添加更多约束?

1 个答案:

答案 0 :(得分:0)

您需要创建一个新捆绑包并在您的应用程序中启用它。然后,将第三方Bundle注册为您的捆绑包的“父”,这是来自文档的示例:

// src/UserBundle/UserBundle.php
namespace UserBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class UserBundle extends Bundle
{
     public function getParent()
     {
         return 'FOSUserBundle';
     }
}

然后你可以通过创建一个具有相同名称的文件来覆盖Bundle的任何部分,在你的情况下,它可能是模型(如果在那里设置了验证)。

在文档中阅读更多内容:https://symfony.com/doc/current/bundles/inheritance.html

修改

文档没有提及覆盖验证:

  

Resources / config / validation.xml文件包含各种类的自定义验证程序规则的定义。 FOSUserBundle定义的规则都在验证组中,因此您可以选择不使用它们。

但有一个讨论,其中提到你不能覆盖它们,你选择不使用它们,但不能添加/删除/改变它们。

https://github.com/FriendsOfSymfony/FOSUserBundle/issues/986