Fatal error: Call to undefined method DoctrineModule\Authentication\Adapter\ObjectRepository::setIdentityValue()
Fatal error: Call to undefined method DoctrineModule\Authentication\Adapter\ObjectRepository::setIdentityValue()
我正在尝试在 ZF2 应用程序中实现身份验证模块,我完全按照我在官方文档中找到的那样做了,但是我收到了这个错误:
Fatal error: Call to undefined method DoctrineModule\Authentication\Adapter\ObjectRepository::setIdentityValue() in DOCROOT/module/Login/src/Login/Controller/IndexController.php on line 33
我把这个放在我的 module.config.php:
'doctrine' => array(
'driver' => array(
__NAMESPACE__ . '_driver' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'cache' => 'array',
'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
),
'orm_default' => array(
'drivers' => array(
__NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
)
)
),
'authentication' => array(
'orm_default' => array(
'object_manager' => 'Doctrine\ORM\EntityManager',
'identity_class' => 'Login\Entity\User',
'identity_property' => 'email',
'credential_property' => 'password',
),
),
)
在我的 module.php:
public function getServiceConfig()
{
return array(
'factories' => array(
'Zend\Authentication\AuthenticationService' => function($serviceManager) {
return $serviceManager->get('doctrine.authenticationservice.orm_default');
}
)
);
}
这是我的控制器:
namespace Login\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class IndexController extends AbstractActionController{
public function indexAction(){
if ($this->getRequest()->isPost()) {
if($this->authenticate()){
return new ViewModel(array(
'error' => 'Your authentication credentials is valid!',
));
}else{
return new ViewModel(array(
'error' => 'Your authentication credentials are not valid',
));
}
}else{
return new ViewModel(array('error' => ''));
}
}
public function authenticate(){
$data = $this->getRequest()->getPost();
$authService = $this->getServiceLocator()->get('Zend\Authentication\AuthenticationService');
$adapter = $authService->getAdapter();
$adapter->setIdentityValue($data['email']);
$adapter->setCredentialValue($data['password']);
$authResult = $authService->authenticate();
if ($authResult->isValid()) {
return true;
}else{
return false;
}
}
}
有胶水吗?
看看这个配置:
好的,我找到了答案。似乎方法 setIdentityValue() 和 setCredentialValue() (吸气剂)不再存在。要设置这些值,您必须调用 setIdentity() 和 setCredential()。
似乎这最近发生了变化,因为我什么也没发现,我的应用程序曾经工作,突然停止工作导致这些变化。
这就是我如何意识到这些方法改变了它们的符号:
$authService = $this->getServiceLocator() >get('Zend\Authentication\AuthenticationService');`
$adapter = $authService->getAdapter();
$class_methods = get_class_methods($adapter);
echo "<pre>";print_r($class_methods);exit;
并且输出:
Array
(
[0] => __construct
[1] => setOptions
[2] => getOptions
[3] => authenticate
[4] => getCredential
[5] => setCredential
[6] => getIdentity
[7] => setIdentity
)
是的,亚瑟,我会确认你的观点(和错误)。
我刚刚更新到 Zend 2.5,我的实际版本。
方法 'setIdentityValue' 和 'setCredentialValue' 需要更改:
- 设置身份()
- 设置凭据()。
通过此更改,我的代码可以正常工作。
我正在尝试在 ZF2 应用程序中实现身份验证模块,我完全按照我在官方文档中找到的那样做了,但是我收到了这个错误:
Fatal error: Call to undefined method DoctrineModule\Authentication\Adapter\ObjectRepository::setIdentityValue() in DOCROOT/module/Login/src/Login/Controller/IndexController.php on line 33
我把这个放在我的 module.config.php:
'doctrine' => array(
'driver' => array(
__NAMESPACE__ . '_driver' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'cache' => 'array',
'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
),
'orm_default' => array(
'drivers' => array(
__NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
)
)
),
'authentication' => array(
'orm_default' => array(
'object_manager' => 'Doctrine\ORM\EntityManager',
'identity_class' => 'Login\Entity\User',
'identity_property' => 'email',
'credential_property' => 'password',
),
),
)
在我的 module.php:
public function getServiceConfig()
{
return array(
'factories' => array(
'Zend\Authentication\AuthenticationService' => function($serviceManager) {
return $serviceManager->get('doctrine.authenticationservice.orm_default');
}
)
);
}
这是我的控制器:
namespace Login\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class IndexController extends AbstractActionController{
public function indexAction(){
if ($this->getRequest()->isPost()) {
if($this->authenticate()){
return new ViewModel(array(
'error' => 'Your authentication credentials is valid!',
));
}else{
return new ViewModel(array(
'error' => 'Your authentication credentials are not valid',
));
}
}else{
return new ViewModel(array('error' => ''));
}
}
public function authenticate(){
$data = $this->getRequest()->getPost();
$authService = $this->getServiceLocator()->get('Zend\Authentication\AuthenticationService');
$adapter = $authService->getAdapter();
$adapter->setIdentityValue($data['email']);
$adapter->setCredentialValue($data['password']);
$authResult = $authService->authenticate();
if ($authResult->isValid()) {
return true;
}else{
return false;
}
}
}
有胶水吗?
看看这个配置:
好的,我找到了答案。似乎方法 setIdentityValue() 和 setCredentialValue() (吸气剂)不再存在。要设置这些值,您必须调用 setIdentity() 和 setCredential()。 似乎这最近发生了变化,因为我什么也没发现,我的应用程序曾经工作,突然停止工作导致这些变化。 这就是我如何意识到这些方法改变了它们的符号:
$authService = $this->getServiceLocator() >get('Zend\Authentication\AuthenticationService');`
$adapter = $authService->getAdapter();
$class_methods = get_class_methods($adapter);
echo "<pre>";print_r($class_methods);exit;
并且输出:
Array
(
[0] => __construct
[1] => setOptions
[2] => getOptions
[3] => authenticate
[4] => getCredential
[5] => setCredential
[6] => getIdentity
[7] => setIdentity
)
是的,亚瑟,我会确认你的观点(和错误)。 我刚刚更新到 Zend 2.5,我的实际版本。 方法 'setIdentityValue' 和 'setCredentialValue' 需要更改: - 设置身份() - 设置凭据()。 通过此更改,我的代码可以正常工作。