gpt4 book ai didi

php - Symfony2 @Assert\Valid : traverse Vs deep

转载 作者:可可西里 更新时间:2023-11-01 12:38:11 25 4
gpt4 key购买 nike

我有一个需要很长时间的简单表格:

$builder->add('manufacturer', 'entity', array(
'class' => 'XBundle\Entity\Manufacturer',
....

))
->add('type','entity', array(
'class' => 'XBundle\Entity\Entity\Type',


))
->add('size','entity', array(
'class' => 'XBundle\Entity\Size',


))
->add('serial', 'text', array(

'required'=>true,
))
;

安装xhproof 并调查问题后,我发现验证 花费了大量时间。

/**
* @ORM\ManyToOne(targetEntity="Ttm\HardwareBundle\Entity\Manufacturer", inversedBy="models")
* @Assert\Valid() <--- this line is the problem
*/
private $manufacturer;

Symfony2 关于有效注释的文档不是很清楚:

traverse

type: boolean default: true

If this constraint is applied to a property that holds an array of objects, then each object in that array will be validated only if this option is set to true.

deep

type: boolean default: false

If this constraint is applied to a property that holds an array of objects, then each object in that array will be validated recursively if this option is set to true.

来源:http://symfony.com/doc/current/reference/constraints/Valid.html

我的问题是,这两个选项之间有什么区别,哪些值可以保证我获得更好的性能?

最佳答案

http://api.symfony.com/2.4/Symfony/Component/Validator/ExecutionContextInterface.html

如果您保留默认值,使用traverse link ,它将覆盖嵌套数组中的所有对象,忽略它在该父对象中看到的任何对象数组,即跳过对它们的验证。它还必须寻找并覆盖任何 \Traversable

的实例

使用 link验证这些对象以寻找嵌套集合。它甚至可能会跳过对那些不符合该标准的验证,例如某种过滤器,所以要小心。

否则,如果您看到性能差异,可能是 traverse 编程不当,或者不得不寻找 Traversable 的实例是很困难的。

如果您不需要遍历,对于您的情况,您可能会考虑仅使用 deep,因为它更快,但请确保您的结果没有被剪裁。

关于php - Symfony2 @Assert\Valid : traverse Vs deep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29775773/

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