3

我目前正在建立我的网站,但我被这个问题阻止了。

我想要一个带有侧栏和中间栏的布局。

在中间一栏中,将有内容。在侧栏中,将有登录表单,如果已登录,则为“欢迎 XXX”。这样您就可以在每个页面上登录。

问题是:我不知道如何创建管理所有日志记录表单/欢迎消息的小部件/视图助手。

目前,我有一个专用于登录的整个控制器,效果很好。但这并不能满足我的需要:)。

任何想法或简单的解释将不胜感激:p。

谢谢 !

4

2 回答 2

7

好的,所以我找到了解决方案。我不知道它是否是最好的,但它确实有效。我已经混合了我在互联网上可以找到的东西。

如果您从未构建过身份验证服务,请查看本教程: 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;
    }
}

我需要在这个视图助手中得到两件事。

  1. 我的登录表单,以便在我的视图中显示它。
  2. 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 中声明它们。

就我而言,我测试用户是否已登录。如果他是,我打印类似“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

于 2013-05-29T09:56:54.750 回答
0

也可能您想查看 Zf2Plugin 以生成动态内容(例如登录表单)
zf2Plugin

于 2014-09-05T13:52:27.717 回答