我正在尝试从我的模型中的类调用 ZFCUser ,但我不断收到此消息:
Call to undefined method Members\Model\MemberTable::zfcUserAuthentication()
这就是我试图称之为:
public function getUserEntity()
{
if($this->zfcUserAuthentication()->getAuthService()->hasIdentity())
{
if (!$this->user_entity)
{
$this->setUserEntity($this->zfcUserAuthentication()->getAuthService()->getIdentity());
}
return $this->user_entity;
}
}
我怀疑我需要实现/扩展一个类以便ZFcuser被识别。
我真的会对此提出一些快速建议。
谢谢
顺便说一下
当我从我的控制器调用ZFCUser时,ZFCUser正常工作,因此使用Zend \ Mvc \ Controller \ AbstractActionController显然可以识别它。
但是对于框架中的其他类,AbstractActionController的等价物是什么。
答案 0 :(得分:1)
zfcUserAuthentication()
是一个控制器插件,因此可以从控制器调用它。您不能(或不应该)尝试从非控制器访问它。如果您需要另一个类中的用户实体,则应将其作为该类的依赖项传递。
编辑:更新您的成员表工厂,以便设置用户实体:
'Members\Model\MemberTable' => function($sm) {
$tableGateway = $sm->get('MemberTableGateway');
$table = new MemberTable($tableGateway);
$authService = $serviceLocator->get('zfcuser_auth_service');
$userEntity = $authService->getIdentity();
$table->setUserEntity($userEntity);
return $table;
}
为您的MemberTable
课程添加一个属性:
protected $userEntity;
和getters / setter:
public function setUserEntity($userEntity)
{
$this->userEntity = $userEntity;
}
public function getUserEntity()
{
return $this->userEntity;
}
然后在需要时调用$this->getUserEntity()
。
答案 1 :(得分:0)
有多种方法可以做到这一点 -
其中一种方法是 - 在“MemberTable.php”文件中执行以下操作。
也许我们的项目中已经提供了以下大部分代码。
一个。在'namespace'语句后添加以下行 -
use Zend\ServiceManager\ServiceLocatorAwareInterface; //Added Line
use Zend\ServiceManager\ServiceLocatorInterface; //Added Line
湾将类语句更改为 -
class MemberTable implements ServiceLocatorAwareInterface { //Modified Line
....
.....
}
℃。在类语句的顶部添加以下行 -
class MemberTable implements ServiceLocatorAwareInterface {
protected $serviceLocator; //Added line
....
.....
}
d。添加以下功能 -
public function setServiceLocator(ServiceLocatorInterface $serviceLocator) {
$this->serviceLocator = $serviceLocator;
}
public function getServiceLocator() {
return $this->serviceLocator;
}
即在Members / Module.php中,进行更改
'Members\Model\MemberTable' => function($sm) {
$tableGateway = $sm->get('MemberTableGateway');
$table = new MemberTable($tableGateway);
$table->setServiceLocator($sm); //This is the important line.
return $table;
}
现在您在MemberTable类中可以使用'ServiceLocator'。
要访问zfcUserAuthentication()
或任何ControllerPlugin,您可以执行以下操作 -
public function getUserEntity()
{
$zfcUserAuth = $this->getServiceLocator()->get('controllerPluginManager')->get('zfcUserAuthentication');
if($zfcUserAuth->getAuthService()->hasIdentity())
{
if (!$this->user_entity)
{
$this->setUserEntity($zfcUserAuth->getAuthService()->getIdentity());
}
return $this->user_entity;
}
}