Symfony2中的实体表单字段和验证?
在我的表单中,我有类型为Symfony2中的实体表单字段和验证?,symfony,doctrine-orm,Symfony,Doctrine Orm,在我的表单中,我有类型为entity的字段。如何在提交表单时禁用该实体的验证?这个实体已经在数据库中持久化了,所以在我看来,验证器并没有必要验证这个实体 编辑: 代码如下所示: class SearchRequest { /** * @ORM\ManyToOne(targetEntity="ArticlePattern") * @ORM\JoinColumn(name="article_pattern_id", onDelete="CASCADE") * @
entity
的字段。如何在提交表单时禁用该实体的验证?这个实体已经在数据库中持久化了,所以在我看来,验证器并没有必要验证这个实体
编辑:
代码如下所示:
class SearchRequest
{
/**
* @ORM\ManyToOne(targetEntity="ArticlePattern")
* @ORM\JoinColumn(name="article_pattern_id", onDelete="CASCADE")
* @Assert\NotBlank
*/
private $articlePattern;
}
/**
* @Assert\NotBlank(groups={"search_request"})
*/
private $articlePattern;
表单字段:
$builder
->add('articlePattern', 'entity', array('class' => 'LonbitItssBundle:ArticlePattern')
验证组不起作用,因为我想让验证器在$articlePattern
字段上检查约束@Assert\NotBlank
,但我不想让他检查类articlePattern中定义的约束。换句话说,我希望防止验证器在$articlePattern对象内部下降,但我希望对$articlePattern字段本身的约束进行验证
你知道怎么做吗
EDIT2:
验证组将工作。因此,最终的解决方案是向SearchRequest类中的每个字段断言添加groups={“search_request”}
constraint选项(组的名称是任意的),如下所示:
class SearchRequest
{
/**
* @ORM\ManyToOne(targetEntity="ArticlePattern")
* @ORM\JoinColumn(name="article_pattern_id", onDelete="CASCADE")
* @Assert\NotBlank
*/
private $articlePattern;
}
/**
* @Assert\NotBlank(groups={"search_request"})
*/
private $articlePattern;
这样,验证将不会下降到相关对象(假设它们不属于-在本例中为“搜索请求”组)。1)如果要禁用此字段,请不要在类表单中使用它!(并将其从模板中删除)
2)或更好,使用。您创建一个不调用验证程序实体的验证组,然后在类表单中使用该组:
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'Sybio\BuzzBundle\Entity\SearchRequest',
'csrf_protection' => true,
'csrf_field_name' => '_token',
'intention' => '865c0c0b4ab0e063e5caa3387c1a8741',
'validation_groups' => array('without_article_pattern_ckecking'),
);
}
在实体类中:
/**
* @ORM\ManyToOne(targetEntity="ArticlePattern")
* @ORM\JoinColumn(name="article_pattern_id", onDelete="CASCADE")
* @Assert\NotBlank(
* groups={"without_article_pattern_ckecking"}
* )
*/
private $articlePattern;
您的表单将只验证引用了无项目模式检查组的验证器,因此如果验证器没有此验证组,则不应在您的项目模式实体内测试验证器
我希望这对你有帮助 1)如果要禁用此字段,请不要在类窗体中使用它!(并将其从模板中删除)
2)或更好,使用。您创建一个不调用验证程序实体的验证组,然后在类表单中使用该组:
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'Sybio\BuzzBundle\Entity\SearchRequest',
'csrf_protection' => true,
'csrf_field_name' => '_token',
'intention' => '865c0c0b4ab0e063e5caa3387c1a8741',
'validation_groups' => array('without_article_pattern_ckecking'),
);
}
在实体类中:
/**
* @ORM\ManyToOne(targetEntity="ArticlePattern")
* @ORM\JoinColumn(name="article_pattern_id", onDelete="CASCADE")
* @Assert\NotBlank(
* groups={"without_article_pattern_ckecking"}
* )
*/
private $articlePattern;
您的表单将只验证引用了无项目模式检查组的验证器,因此如果验证器没有此验证组,则不应在您的项目模式实体内测试验证器
我希望这对你有帮助 如何将字段设置为
禁用
或只读
?如何将字段设置为禁用
或只读
?正如我所写,我希望在表单中包含此字段,因此验证组可能是答案。我会检查的,我很吃惊不是这样的。我在我的问题中包括了代码和一些解释。通常,通过这样做:/***@ORM\manytone(targetEntity=“ArticlePattern”)*@ORM\JoinColumn(name=“article\u pattern\u id”,onDelete=“CASCADE”)*@Assert\NotBlank(*groups={“without\u article\u pattern\u ckecking”}*)*/private$ArticlePattern;在form类中:“validation\u groups'=>array('without\u article\u pattern\u ckeck'),您的表单将只验证引用without\u article\u pattern\u ckeck组的验证器,因此如果验证器没有此验证组,则不应在ArticlePattern实体内测试验证器:o!你是对的。那就行了。请将上述注释中的代码添加到您的答案中,我会将其作为解决方案进行检查。从本文档来看:$articlePattern似乎只有在具有@Assert\Valid注释时才应进行验证,但它没有。所以这个问题本来就不应该出现,奇怪:/如果有人知道怎么办,请告诉我这里会发生什么。正如我写的,我想在表单中包含这个字段,所以验证组可能就是答案。我会检查的,我很吃惊不是这样的。我在我的问题中包括了代码和一些解释。通常,通过这样做:/***@ORM\manytone(targetEntity=“ArticlePattern”)*@ORM\JoinColumn(name=“article\u pattern\u id”,onDelete=“CASCADE”)*@Assert\NotBlank(*groups={“without\u article\u pattern\u ckecking”}*)*/private$ArticlePattern;在form类中:“validation\u groups'=>array('without\u article\u pattern\u ckeck'),您的表单将只验证引用without\u article\u pattern\u ckeck组的验证器,因此如果验证器没有此验证组,则不应在ArticlePattern实体内测试验证器:o!你是对的。那就行了。请将上述注释中的代码添加到您的答案中,我会将其作为解决方案进行检查。从本文档来看:$articlePattern似乎只有在具有@Assert\Valid注释时才应进行验证,但它没有。所以问题不应该首先出现,奇怪:/如果有人知道路,请告诉我这里会发生什么。