Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony2中的实体表单字段和验证?_Symfony_Doctrine Orm - Fatal编程技术网

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注释时才应进行验证,但它没有。所以问题不应该首先出现,奇怪:/如果有人知道路,请告诉我这里会发生什么。