检查是否违反唯一约束
Check for unique constraint violation
我的实体上有 2 个字段构成唯一约束:fieldA
和 fieldB
,分别映射到数据库列 field_a
和 field_b
。
我的输入过滤器需要两个字段:
public function init()
{
parent::init();
$this->add([
'name' => 'field_a',
'required' => true,
'allow_empty' => false,
]);
$this->add([
'name' => 'field_b',
'required' => true,
'allow_empty' => false,
]);
}
我正在尝试找出验证这 2 个字段在数据库中是否唯一的最佳方法 table。如果已经存在具有相同字段值的不同实体,输入过滤器将无法通过验证。
我想我会覆盖 isValid
函数并将我的自定义逻辑放在那里。
我建议在两个字段上使用回调验证器 (Zend\Validator\Callback),并将您的自定义逻辑放入回调函数中。
我会使用 InputFilter 向表单字段添加过滤器和验证器,但您可以直接在 Form/Fieldset class.
中实现 InputFilterProviderInterface
use Zend\InputFilter\InputFilter;
class FormFilter extends InputFilter
{
public function __construct()
{
$this->add(
array(
'name' => 'field_a',
'filters' => array(),
'validators' => array (
array(
'name' => 'Zend\Validator\Callback',
'options' => array(
'messages' => array(
\Zend\Validator\Callback::INVALID_VALUE => 'Custom Message',
),
'callback' => array($this,'validateFieldA'),
),
),
)
)
);
$this->add(
array(
'name' => 'field_b',
'filters' => array(),
'validators' => array (
array(
'name' => 'Zend\Validator\Callback',
'options' => array(
'messages' => array(
\Zend\Validator\Callback::INVALID_VALUE => 'Custom Message',
),
'callback' => array($this,'validateFieldB'),
),
),
)
)
);
}
public function validateFieldA($value, $context)
{
// $value contains the field_a value
// $context['field_b'] contains the field_b value
// put your custom logic here
// return true if the fields are unique
// return false if the fields are not unique
}
public function validateFieldB($value, $context)
{
....
}
}
我的实体上有 2 个字段构成唯一约束:fieldA
和 fieldB
,分别映射到数据库列 field_a
和 field_b
。
我的输入过滤器需要两个字段:
public function init()
{
parent::init();
$this->add([
'name' => 'field_a',
'required' => true,
'allow_empty' => false,
]);
$this->add([
'name' => 'field_b',
'required' => true,
'allow_empty' => false,
]);
}
我正在尝试找出验证这 2 个字段在数据库中是否唯一的最佳方法 table。如果已经存在具有相同字段值的不同实体,输入过滤器将无法通过验证。
我想我会覆盖 isValid
函数并将我的自定义逻辑放在那里。
我建议在两个字段上使用回调验证器 (Zend\Validator\Callback),并将您的自定义逻辑放入回调函数中。
我会使用 InputFilter 向表单字段添加过滤器和验证器,但您可以直接在 Form/Fieldset class.
中实现 InputFilterProviderInterfaceuse Zend\InputFilter\InputFilter;
class FormFilter extends InputFilter
{
public function __construct()
{
$this->add(
array(
'name' => 'field_a',
'filters' => array(),
'validators' => array (
array(
'name' => 'Zend\Validator\Callback',
'options' => array(
'messages' => array(
\Zend\Validator\Callback::INVALID_VALUE => 'Custom Message',
),
'callback' => array($this,'validateFieldA'),
),
),
)
)
);
$this->add(
array(
'name' => 'field_b',
'filters' => array(),
'validators' => array (
array(
'name' => 'Zend\Validator\Callback',
'options' => array(
'messages' => array(
\Zend\Validator\Callback::INVALID_VALUE => 'Custom Message',
),
'callback' => array($this,'validateFieldB'),
),
),
)
)
);
}
public function validateFieldA($value, $context)
{
// $value contains the field_a value
// $context['field_b'] contains the field_b value
// put your custom logic here
// return true if the fields are unique
// return false if the fields are not unique
}
public function validateFieldB($value, $context)
{
....
}
}