簡體   English   中英

Symfony 3:validation_groups中的GroupSequence

[英]Symfony 3 : GroupSequence in validation_groups

在我的實體中,我有以下領域:

/**
 * @Assert\Regex("/^[a-z0-9-]+$/", groups={"Basic1"})
 * @Assert\Regex("/^[a-z0-9]+[a-z0-9-]*[a-z0-9]+$/", groups={"Basic2"})
 * @AppAssert\SaveDomain(groups={"Registration"})
 */
protected $myField;

我想按以下順序驗證字段:Basic1,Basic2,注冊。

當我在類注釋中使用GroupSequence時:

/**
 * @Assert\GroupSequence({"MyEntity", "Basic1", "Basic2", "Registration"})
 */
class MyEntity
{

可以正常工作,Basic1 => Basic2 =>注冊:

但是我也需要使用validation_groups ...並且當我在Type類中指定它時,GroupSequence不再起作用。

我嘗試直接在validation_groups中使用GroupSequence,但似乎不起作用,就像在這里說的那樣: https : //github.com/symfony/symfony/pull/10287

$form = $this->createForm(new BlogType(), new Blog(), [
    'validation_groups' => new GroupSequence(['Basic', 'Strict']),
]);

但是我將其放入Type類中的configureOptions中:

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'data_class' => 'AppBundle\Entity\MyEntyty',
        'validation_groups' => new GroupSequence(['Basic1', 'Basic2', 'Registration']),
    ]);
}

有人知道如何同時使用GroupSequence和validation_groups嗎?

我現在發現的唯一解決方案是專門為此字段創建一個自定義驗證器...

您可以簡單地在實體字段中指定分組序列,如下所示:

/**
 * @Assert\GroupSequence({"Basic1", "Basic2", "Registration"})
 */
class MyEntity
{

/**
 * @Assert\Regex("/^[a-z0-9-]+$/", groups={"Basic1"})
 * @Assert\Regex("/^[a-z0-9]+[a-z0-9-]*[a-z0-9]+$/", groups={"Basic2"})
 * @AppAssert\SaveDomain(groups={"Registration"})
 */
protected $myField;

希望這個幫助

此功能已被修正。

參見回購上的相應票證: https : //github.com/symfony/symfony/issues/20929

校正合並后,此解決方案應起作用。

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'data_class' => 'AppBundle\Entity\MyEntyty',
        'validation_groups' => new GroupSequence(['Basic1', 'Basic2', 'Registration']),
    ]);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM