如何在 zf2 中添加 Db \ NoRecordExists 输入过滤器,以便它可以通过匹配数据库中的值(不包括我们正在编辑的条目)来验证发布的数据。
$validator = new Zend\Validator\Db\NoRecordExists(
array(
'table' => 'users',
'field' => 'username',
'exclude' => array(
'field' => 'id',
'value' => $user_id
)
)
);
这对我不起作用.. !!
答案 0 :(得分:2)
我找到了解决这个问题的方法。基本上,默认的NoRecordExists验证器期望在配置参数中排除值和列。这可以在控制器中更改为mentioned by Ritesh;我玩了一会儿并得到了这个解决方案。
我正在使用isValid函数中可用的上下文数组变量。您不必发送id值,而是发送表单字段的值以从
中选取 在InputFilter中你有以下
$this->add ( array (
'name' => 'user_email',
'required' => true,
'filters' => array (
array (
'name' => 'StringTrim',
),
array (
'name' => 'StripTags',
),
),
'validators' => array (
array (
'name' => 'EmailAddress',
'options' => array (
'domain' => true,
)
),
array (
'name' => 'Application\Validator\NoRecordExists',
'options' => array (
'table' => 'user',
'field' => 'user_email',
'adapter' => \Zend\Db\TableGateway\Feature\GlobalAdapterFeature::getStaticAdapter( ),
'exclude' => array(
'field' => 'user_id',
'formValue' => 'user_id',
),
)
),
)
) );
在表单中放置一个隐藏元素user_id
;在检查元素是否有效时使用设置的值。
<?php
namespace Application\Validator;
class NoRecordExists extends \Zend\Validator\Db\NoRecordExists {
public function isValid( $value, $context=array( ) ) {
$exclude = $this->getExclude();
if( is_array( $exclude ) ){
if ( array_key_exists( 'formValue', $exclude ) ) {
$formValue = $exclude[ 'formValue' ];
$exclude[ 'value' ] = $context[ $formValue ];
$this->setExclude( $exclude );
}
}
return parent::isValid( $value );
}
}
希望这有帮助
答案 1 :(得分:0)
要实现此目的,请在您的控制器中尝试此操作,并从模型中删除无记录存在的验证:
private function getUserTable()
{
if (!$this->stateTable) {
$sm = $this->getServiceLocator();
$this->userTable = $sm->get('Admin\Model\UserTable');
}
return $this->userTable;
}
在编辑操作中添加以下行 -
$user = $this->getUserTable()->getUser($id);
$user->getInputFilter()->get('username')->getValidatorChain()->attach(new \Zend\Validator\Db\NoRecordExists(array('table' => 'users','field' => 'username','adapter' => $this->getServiceLocator()->get('Zend\Db\Adapter\Adapter'), 'exclude' => array('field' => 'id','value' => $id))));
其中$ id是您正在执行编辑的当前用户ID .. !!它对我来说很完美.. !!