Я использую Zend Framework v.3 и проверку через InputFilter()
, он использует те же правила проверки, что и Zend Framework 2.
В моем случае мне нужно проверить, существует ли местоположение в db (от 'id'
поле) и требуется идентификатор компании ('company_id'
поле).
Я реализовал это следующим образом:
$clause = new Operator('company_id', Operator::OP_EQ, $companyId);
$inputFilter->add([
'name' => 'location_id',
'required' => false,
'filters' => [
['name' => 'StringTrim'],
['name' => 'ToInt'],
],
'validators' => [
[
'name' => 'Int',
],
[
'name' => 'dbRecordExists',
'options' => [
'adapter' => $dbAdapterCore,
'table' => 'locations',
'field' => 'id',
'exclude' => $clause,
'messages' => [
'noRecordFound' => "Location does not exist.",
],
]
],
],
]);
В этом случае проверка пройдет, только если 'locations'
В таблице есть элемент со столбцами id == $value
и company_id == $companyId
, например:
select * from location where id = ? AND company_id = ?