[英]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,
]);
}
我試圖找出最好的方法來驗證這兩個字段在數據庫表中是唯一的。 如果已經存在具有相同字段值的不同實體,則輸入過濾器將無法通過驗證。
我以為我會覆蓋isValid
函數並將自定義邏輯放在那里。
我建議在兩個字段上都使用回調驗證器(Zend \\ Validator \\ Callback),並將您的自定義邏輯放在回調函數中。
我將使用InputFilter將過濾器和驗證器添加到表單字段,但是您可以直接在Form / Fieldset類中實現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)
{
....
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.