如何在Zend框架1中获取布局中的会话值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (52)

我想从layout.xml访问会话值。

Layout.xml:

<h2><?php  $myprofile=new Zend_Session('user_session');
  print $myprofile->username; ?> </h2>

索引控制器/索引操作:

  $userid = $this->_user->getUserId($username,$password);
  $session = new Zend_Session_Namespace('user_session');
  $session->username = $username;
  $session->password = $password;
  $session->uid = $userid;
  $this->_redirect('home');

家庭控制器/索引行动:

$this->session = new Zend_Session_Namespace('user_session');
$this->view->uname = $this->session->username;

首页/ index.phtml:

<?php echo "The User Name is ".$this->uname?>

但它显示错误:

Fatal error: Call to protected Zend_Session::__construct() from context 'Zend_View' in/var/www/shoppingcart/application/layouts/scripts/layout.phtml on line 19

我能够在Home / index.html中获取会话值。

提问于
用户回答回答于

Zend_Session视图脚本放在一般被认为是不好的做法。

// Bootstrap.php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    public function _initUserSession()
    {
        // If not already done, bootstrap the view
        $this->bootstrap('view');
        $view = $this->getResource('view');

        // Initialise the session
        $session = new Zend_Session_Namespace('user_session');

        // See if the username has been set, and if not at 
        // least make the variable
        if (isset($session->username)
            $view->username = $session->username;
        else
            $view->username = null;       
    }
}

在布局中可以这样做:

<?php if ($this->username !== null) : ?>
   The User Name is <?php echo $this->username ?>
<?php else : ?>
   No username has been set.
<?php endif; ?>
用户回答回答于

为什么在布局中使用Zend_Session并在视图中使用Zend_Session_Namespace?

也许你应该在视图/布局中使用会话,但是从控制器或引导文件传递它作为参数。

扫码关注云+社区

领取腾讯云代金券