Symfony2:将 getter 约束错误附加到字段
Symfony2: append getter constraint error to the field
大家好!
问题
我找不到将 getter 验证错误附加到表单中特定字段的解决方案。
我的实体中有一个方法 Presale::hasPresaleProductsAdded()
。此方法 returns 关于添加到集合中的产品数量是对还是错
提交表单后,验证错误冒泡到父表单(因为表单上没有字段 "presaleProductsAdded")。我想将此错误附加到 "presaleProducts" 字段。
我知道 error_mapping
属性,但我无法使用它
代码
这是我的validation.yml
OQ\PresaleBundle\Entity\Presale:
properties:
name:
- NotBlank: ~
description:
- NotBlank: ~
company:
- NotBlank: ~
getters:
presaleProductsAdded:
- "True": { message: "Specify at least one product" }
可能的解决方案
我知道这个问题可以通过自定义验证约束来解决class。
但问题是 - 我可以只使用 validation.yml、实体方法和 getter 约束
所以,我明白了。
1) 我忘记了 error_bubbling
选项。
Presale::presaleProducts
属性 在表单中分配了自定义字段类型。该自定义字段类型是复合字段,父类型设置为 "form"。在这种情况下,error_bubbling
默认为 true
。
切换为错误:
class PresaleProductsType extends AbstractType
{
...
/**
* @param OptionsResolverInterface $resolver
*/
public
function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(
[
'data_class' => 'OQ\PresaleBundle\Entity\PresaleProducts',
'error_bubbling' => false, // That's it!
]
);
}
/**
* @return string
*/
public
function getName()
{
return 'oq_presale_products';
}
/**
* @return string
*/
public
function getParent()
{
return 'form';
}
...
}
2) PresaleType 表单中的 error_mapping
选项配置如下:'hasPresaleProductsAdded' => 'presaleProducts'
错误在 属性 路径名中:symfony 没有找到 public $hasPresaleProductsAdded;
并试图找到 public getter(或 isser 或 hasser),例如:
Presale::getHasPresaleProductsAdded()
Presale::hasHasPresaleProductsAdded()
Presale::isHasPresaleProductsAdded()
但是实体class定义中只有Presale::hasPresaleProductsAdded()
。
所以,我修复了 error_mapping 选项:
'error_mapping' => array(
'presaleProductsAdded' => 'presaleProducts',
),
然后一切都开始正常工作了!
大家好!
问题
我找不到将 getter 验证错误附加到表单中特定字段的解决方案。
我的实体中有一个方法 Presale::hasPresaleProductsAdded()
。此方法 returns 关于添加到集合中的产品数量是对还是错
提交表单后,验证错误冒泡到父表单(因为表单上没有字段 "presaleProductsAdded")。我想将此错误附加到 "presaleProducts" 字段。
我知道 error_mapping
属性,但我无法使用它
代码
这是我的validation.yml
OQ\PresaleBundle\Entity\Presale:
properties:
name:
- NotBlank: ~
description:
- NotBlank: ~
company:
- NotBlank: ~
getters:
presaleProductsAdded:
- "True": { message: "Specify at least one product" }
可能的解决方案
我知道这个问题可以通过自定义验证约束来解决class。 但问题是 - 我可以只使用 validation.yml、实体方法和 getter 约束
所以,我明白了。
1) 我忘记了 error_bubbling
选项。
Presale::presaleProducts
属性 在表单中分配了自定义字段类型。该自定义字段类型是复合字段,父类型设置为 "form"。在这种情况下,error_bubbling
默认为 true
。
切换为错误:
class PresaleProductsType extends AbstractType
{
...
/**
* @param OptionsResolverInterface $resolver
*/
public
function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(
[
'data_class' => 'OQ\PresaleBundle\Entity\PresaleProducts',
'error_bubbling' => false, // That's it!
]
);
}
/**
* @return string
*/
public
function getName()
{
return 'oq_presale_products';
}
/**
* @return string
*/
public
function getParent()
{
return 'form';
}
...
}
2) PresaleType 表单中的 error_mapping
选项配置如下:'hasPresaleProductsAdded' => 'presaleProducts'
错误在 属性 路径名中:symfony 没有找到 public $hasPresaleProductsAdded;
并试图找到 public getter(或 isser 或 hasser),例如:
Presale::getHasPresaleProductsAdded()
Presale::hasHasPresaleProductsAdded()
Presale::isHasPresaleProductsAdded()
但是实体class定义中只有Presale::hasPresaleProductsAdded()
。
所以,我修复了 error_mapping 选项:
'error_mapping' => array(
'presaleProductsAdded' => 'presaleProducts',
),
然后一切都开始正常工作了!