已忽略Symfony2/3子实体约束断言



我有一种情况,实体类内部的验证约束被忽略。。。

这个不起作用(它是ActivityField实体的子实体):

<?php
namespace XXXActivityFieldsBundleEntity;
use DoctrineORMMapping as ORM;
use XXXDatabaseBundleEntityAbstractEntity;
use SymfonyComponentValidatorConstraints as Assert;
/**
 * @ORMEntity(repositoryClass="XXXActivityFieldsBundleRepositoryActivityFieldLanguagesRepository")
 * @ORMHasLifecycleCallbacks
 * @ORMTable(name="activity_field_languages")
 */
class ActivityFieldLanguages extends AbstractEntity
{
    /**
     * @ORMId
     * @ORMColumn(type="integer")
     * @ORMGeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     * @ORMColumn(name="name", type="text")
     * @AssertNotBlank()    ----> !!! this one here !!!
     */
    protected $name;

而这个(独立的,与其他实体没有任何连接)是有效的:

<?php
namespace XXXLanguagesBundleEntity;
use DoctrineORMMapping as ORM;
use XXXDatabaseBundleEntityAbstractEntity;
use SymfonyBridgeDoctrineValidatorConstraintsUniqueEntity;
use XXXCommonBundleValidatorConstraints as SiteAssert;
use SymfonyComponentValidatorConstraints as Assert;
/**
 * @ORMEntity(repositoryClass="XXXLanguagesBundleRepositoryLanguagesRepository")
 * @ORMHasLifecycleCallbacks
 * @ORMTable(name="languages")
 *
 * @UniqueEntity(fields="name")
 * @UniqueEntity(fields="iso")
 */
class Languages extends AbstractEntity
{
    /**
     * @ORMId
     * @ORMColumn(type="integer")
     * @ORMGeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     * @ORMColumn(name="name", type="string", unique=true)
     * @AssertNotBlank() -----> this one here !!!
     * @AssertLength(
     *     min=2,
     *     minMessage="validator.minimum.2.characters"
     * )
     */
    protected $name;

如果我在FormType中添加约束,那么一切都可以,但我不想这样,并将实体文件中的所有内容都作为注释。在我的配置文件中,我有

framework:
    validation:      { enable_annotations: true }

若要"通过"对子窗体类型的验证,需要将@AssertValid添加到父类型中。

因此,与条令实体相关,如果ActivityFieldLanguagesActivityField的子实体,那么父实体应该标记该关系以进行验证。

/**
 * @var ActivityFieldLanguages[] $activityFieldLanguages
 * @AssertValid()
 */
protected $activityFieldLanguages;

如果您想在FormType中直接执行此操作,则应该向(可能)CollectionType:添加相同的约束

$formBuilder->add('activityFieldLanguages', CollectionType::class, array(
    // ...
    'constraints' => new Valid()
);

有关更多信息:http://symfony.com/doc/current/reference/constraints/Valid.html

可能是您有验证组,而表单中可能使用的组中没有包含"name"。这可能会导致此类逻辑错误。

相关内容

  • 没有找到相关文章

最新更新