gpt4 book ai didi

Symfony2实体注释断言/回调方法未调用

转载 作者:行者123 更新时间:2023-12-02 12:30:04 25 4
gpt4 key购买 nike

我在断言/回调验证方面遇到问题。我用过this作为我的代码的示例,但 Symfony 只是忽略验证功能。这是我的实体代码的相关部分

namespace Vendor\Bundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo; // gedmo annotations
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\ExecutionContext;


/**
* @Assert\Callback(methods={"isValidFirma"})
* @ORM\Entity(repositoryClass="Vendor\Bundle\Entity\UserProfileRepository")
* @ORM\Table(name="user_profile")
*/
class UserProfile
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

//...

public function isValidFirma(ExecutionContext $context){
$context->addViolationAtSubPath('Firma', 'Company name must be present', array(), null);
// as of sf 2.3 use addViolationAt() instead [reference: https://github.com/propelorm/PropelBundle/issues/234 ]
}

//...

}

isValidFirma 从未被调用。我也尝试了validation.yml 文件而不是注释,但没有成功。我清除了大约五十次缓存,每次更改后都没有帮助。可能是什么问题?

最佳答案

解决方案。问题出在使用的验证器组中。断言验证器必须是该组的一部分,否则它不会触发。表单类文件中的这段代码是罪魁祸首:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$vg = array('my-profile');


$resolver->setDefaults(array(
'validation_groups' => $vg
));
}

将断言行更改为

* @Assert\Callback(methods={"isValidFirma"}, groups={"my-profile"})

成功了。

关于Symfony2实体注释断言/回调方法未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13030472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com