我目前正在构建我的网站,而且我遇到了这个问题.
我想要一个带有侧栏和中间栏的布局.
在中间栏中,将有内容.
在侧栏中,将有登录表单,如果已经记录,则为“欢迎XXX”.这样您就可以登录每一页.
问题是:我不知道如何创建管理所有日志表单/欢迎消息的小部件/视图助手.
目前,我有一个专门用于登录的整个控制器,效果很好.但这不是我需要的:).
任何想法或简单的解释将不胜感激:p.
谢谢 !
解决方法:
好的,所以我找到了解决方案.我不知道它是不是最好的,但它确实有效.
我把它与我在网上找到的东西混合在一起.
所以主要的解决方案是使用view-helper.所以在我们的布局中我们只需要调用类似的东西:
$this->Login_widget();
您必须创建自定义视图助手:
namespace Application\View\Helper;
use Zend\View\Helper\AbstractHelper;
use Application\Form\LoginForm;
use Zend\ServiceManager\ServiceManager;
class Loginhelper extends AbstractHelper{
protected $serviceLocator;
protected $authService;
public function __invoke(){
$this->authService = $this->serviceLocator->get('AuthService');
if($this->authService->hasIdentity()){
return $this->getView()->render('partial/login', array('getIdentity' => $this->authService->getIdentity()));
}
else{
$form=new LoginForm();
return $this->getView()->render('partial/login', array('form' => $form));
}
}
public function setServiceLocator(ServiceManager $serviceLocator){
$this->serviceLocator = $serviceLocator;
}
}
我需要在这个视图帮助器中获得两件事.
>我的登录表单,以便在我的视图中显示它.
> ServiceManager(或ServiceLocator),用于获取我的身份验证服务(称为AuthService).
获取登录表单非常简单.只需加入它.
在Module.php中完成您的服务.
public function getViewHelperConfig()
{
return array(
'factories' => array(
'Login_widget' => function ($helperPluginManager) {
$serviceLocator = $helperPluginManager->getServiceLocator();
$viewHelper = new View\Helper\Loginhelper();
$viewHelper->setServiceLocator($serviceLocator);
return $viewHelper;
}
)
);
}
使用此代码,您可以将serviceLocator提供给viewhelper.
现在,您可以在viewhelper中检索您的服务.同样,我不太确定它是否是最佳解决方案,但它确实有效.
您的查看帮助程序现在正在运行.您只需创建视图助手的内容即可.
您可以返回部分(如我所做),或返回HTML代码(适用于小事).
如果使用partials,请不要忘记在module.config.php中声明它们.
就我而言,我测试用户是否已登录.如果他是,我打印像“欢迎家伙”,如果没有,我将表格对象传递给我的部分,并在我的视图中显示.整个身份验证过程在指定的控制器中完成.
现在,在您的布局中,您只需要调用viewhelper.
echo $this->Login_helper();
?>
<?php echo $this->content; ?>
就是这样.我希望它有所帮助.顺便说一下,这是ZF 2.2
标签:php,zend-framework2
来源: https://codeday.me/bug/20190729/1567380.html