В моей форме у меня есть поле foo
, которое должно быть уникальным в таблице базы данных. Поэтому я добавил Zend\Validator\Db\NoRecordExists
в список валидаторов:Как сделать проверку поля зависимой от другой формы формы массива полей в ZF2?
namespace Bar\Form\Fieldset;
use Zend\Form\Fieldset;
use Zend\InputFilter\InputFilterProviderInterface;
use Zend\Db\Adapter\AdapterInterface;
class BuzFieldset extends Fieldset implements InputFilterProviderInterface
{
protected $dbAdapter;
public function __construct($name = null, $options = []) {...}
public function setDbAdapter(AdapterInterface $dbAdapter) {...}
public function init()
{
$this->add([
'name' => 'id',
'type' => 'hidden'
]);
$this->add(
[
'name' => 'foo',
'type' => 'text',
'options' => [...],
'attributes' => [
'required' => 'required',
'class' => 'form-control'
]
]);
...
}
public function getInputFilterSpecification()
{
return [
'foo' => [
'required' => true,
'validators' => [
[
'name' => 'Regex',
'options' => [
'pattern' => '/.../',
'message' => _(...)
]
],
[
'name' => 'Zend\Validator\Db\NoRecordExists',
'options' => [
'table' => 'buz',
'field' => 'foo',
'adapter' => $this->dbAdapter
]
]
]
],
...
];
}
}
Теперь я хочу использовать ту же форму для обновления записей и, конечно, не может получить форму проверенную. Поэтому мне нужно сделать валидацию NoRecordExists
для этого поля в зависимости от поля id
. Если установлено значение id
(это означает, что это обновление, а не создание), все валидаторы (например, здесь Regex
) должны применяться, но этого нет. Как это сделать?
Это работает, спасибо большое! – automatix