我目前正在建立我的网站,但我被这个问题阻止了。
我想要一个带有侧栏和中间栏的布局。
在中间一栏中,将有内容。在侧栏中,将有登录表单,如果已登录,则为“欢迎 XXX”。这样您就可以在每个页面上登录。
问题是:我不知道如何创建管理所有日志记录表单/欢迎消息的小部件/视图助手。
目前,我有一个专用于登录的整个控制器,效果很好。但这并不能满足我的需要:)。
任何想法或简单的解释将不胜感激:p。
谢谢 !
我目前正在建立我的网站,但我被这个问题阻止了。
我想要一个带有侧栏和中间栏的布局。
在中间一栏中,将有内容。在侧栏中,将有登录表单,如果已登录,则为“欢迎 XXX”。这样您就可以在每个页面上登录。
问题是:我不知道如何创建管理所有日志记录表单/欢迎消息的小部件/视图助手。
目前,我有一个专用于登录的整个控制器,效果很好。但这并不能满足我的需要:)。
任何想法或简单的解释将不胜感激:p。
谢谢 !
好的,所以我找到了解决方案。我不知道它是否是最好的,但它确实有效。我已经混合了我在互联网上可以找到的东西。
如果您从未构建过身份验证服务,请查看本教程: http ://samsonasik.wordpress.com/2012/10/23/zend-framework-2-create-login-authentication-using-authenticationservice-with-rememberme/
所以主要的解决方案是使用视图助手。所以在我们的布局中,我们只需要调用类似的东西:
$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;
}
}
我需要在这个视图助手中得到两件事。
获取登录表单非常简单。只需包括它。获取服务在您的 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 中声明它们。
就我而言,我测试用户是否已登录。如果他是,我打印类似“Welcome dude”的内容,如果不是,我将表单对象传递给我的部分对象,并将其显示在我的视图中。整个认证过程在指定的控制器中完成。
现在,在您的布局中,您只需调用 viewhelper。
<div class="container">
<div id="The_login_widget_div">
<?php
echo $this->Login_helper();
?>
</div>
<div id="main_content_div">
<?php echo $this->content; ?>
</div>
</div>
就是这样。我希望它对某人有所帮助。顺便说一句,这是 ZF 2.2
也可能您想查看 Zf2Plugin 以生成动态内容(例如登录表单)
zf2Plugin