我有一种情况,实体类内部的验证约束被忽略。。。
这个不起作用(它是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
添加到父类型中。
因此,与条令实体相关,如果ActivityFieldLanguages
是ActivityField
的子实体,那么父实体应该标记该关系以进行验证。
/**
* @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"。这可能会导致此类逻辑错误。