gpt4 book ai didi

php - Symfony 验证回调 - 如何在错误时获取属性名称?

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

我已将我的实体设置为具有生命周期回调,用于验证来自 mySQL 的模拟 ENUM 字段。

它工作正常,除了在抛出错误时它不提供属性名称,因此它与来自 Assert 的错误格式不匹配。

在下面的示例中,第一个错误来自回调并且没有关于属性的信息,而其余部分由 Assert 生成并包含有问题的属性:

UsedBundle\AdController

$errors = $this->form_errors->getErrorMessages($form);
\Doctrine\Common\Util\Debug::dump($errors);

array(3) { [0]=> string(14) "Invalid doors!" ["powerHp"]=> array(1) { [0]=> string(32) "This value should be 50 or more." } ["price"]=> array(1) { [0]=> string(34) "This value should be 1000 or more." } }

我可以根据消息知道错误的来源,但这也会抛出生成错误变量以输出给用户的函数。

设置如下:

UsedBundle\Entity\Ad

namespace UsedBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
use Symfony\Component\Validator\Mapping\ClassMetadata;
/**
* @ORM\Entity(repositoryClass="UsedBundle\Repository\AdRepository")
* @ORM\HasLifecycleCallbacks
* @ORM\Table(name="ads")
*/
class Ad
{

/**
* @var integer
*
* @ORM\Id
* @ORM\Column(type="smallint",length=4,unique=true,options={"unsigned":true})
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

......

public static $valid_doors = array(
'2' => '2',
'3' => '3',
'4' => '4',
'5' => '5',
);

/**
* @Assert\Callback
*/
public function validate(ExecutionContextInterface $context, $payload)
{
if (!in_array($this->getdoors(), self::$valid_doors)) {
$context->buildViolation('Invalid doors!')
->atPath('doors')
->addViolation();
}
}
}

最佳答案

在您的情况下(当然,如果您的 Symfony 版本不早于 2.4),我可以建议使用静态验证函数。当您使用静态函数时 - 您必须传递 $object!

/**
* @static validate
*
* @param $object
* @param ExecutionContextInterface $context
*/
public static function validate($object, ExecutionContextInterface $context)
{
if (!in_array($object->getdoors(), self::$valid_doors)) {
$context->buildViolation('Invalid doors!')
->atPath('doors')
->addViolation();
}
}

如您所见——没有注释 /** @Assert\Callback */!此外不必写类注解@ORM\HasLifecycleCallbacks。希望能帮助到你!

Also - this is a link to official Symfony documentation

关于php - Symfony 验证回调 - 如何在错误时获取属性名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47042306/

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