【发布时间】:2015-12-06 15:11:01
【问题描述】:
我已经实现了一个自定义验证器类,如下所示
class UsernameUnique extends AbstractValidator implements ServiceLocatorAwareInterface
{
use ServiceLocatorAwareTrait;
protected $userManager;
public function getUserManager()
{
if(!$this->userManager)
{
$this->userManager = $this->getServiceLocator()->get('RTUserManager');
}
return $this->userManager;
}
public isValid()
{
$um = $this->getUserManager();
//rest of code
}
}
我已经在表单中使用了这个验证器。
'validators' => array(
array(
'name' => 'RTUser\Form\Validator\EmailUnique'
)
)
一切似乎都很好,但是当表单验证发生时,我得到一个异常提示
Zend\Validator\ValidatorPluginManager::get was unable to fetch or create an instance for RTUserManager
堆栈跟踪指向 Validator 类。
“RTUserManager”可以从控制器创建。所以service_manager配置没有问题。但是验证器无法创建它的实例。
我该如何解决这个问题?
编辑: 这是控制器插件中的代码。
public function register()
{
$newuser = $this->getInputValues();
if($newuser->isValid())
{
$userdata = $newuser->getData(FormInterface::VALUES_AS_ARRAY);
if($this->saveUserToDB($userdata))
{
return $message('Registration has been successful. Verify your email address to login.');
}
}
return $this->registrationForm($newuser);
}
protected function getInputValues()
{
$userdata = $this->getController()->getRequest()->getPost();
$newuser = new RegistrationForm();
$newuser->bind($userdata);
return $newuser;
}
表单代码。
class RegistrationForm extends Form
{
protected $inputfilter;
public function __construct()
{
//code to add form elements
$this->setInputFilter($this->getInputFilter());
}
public function getInputFilter()
{
if(!$this->inputfilter)
{
$inputFilter = new InputFilter();
//code to add other validators and filters
$inputFilter->add(
'name' => 'email',
'validators' => array(
'name' => 'RTUser\Form\Validator\EmailUnique',
)
);
$this->inputfilter = $inputFilter;
}
return $this->inputfilter;
}
}
【问题讨论】:
标签: zend-framework2