Zend framework2 在zf2中显示登录用户的用户名

Zend framework2 在zf2中显示登录用户的用户名,zend-framework2,Zend Framework2,我在ZF2中有登录和注销系统。我想在登录用户登录时显示其用户名。屏幕截图如下: 我有不同的视图,如view/provides/index.phtml、view/districts/index.phtml等 我在view/layout/layout.phtml中有layout.phtml,其中我描述了针对每个视图的管理员布局。因此有必要访问layout.phtml中登录用户的用户名 我还有相应的控制器,如Controller/ProvincesController.php、Controller/

我在ZF2中有登录和注销系统。我想在登录用户登录时显示其用户名。屏幕截图如下:

我有不同的视图,如view/provides/index.phtml、view/districts/index.phtml等

我在view/layout/layout.phtml中有layout.phtml,其中我描述了针对每个视图的管理员布局。因此有必要访问layout.phtml中登录用户的用户名

我还有相应的控制器,如Controller/ProvincesController.php、Controller/DistrictsController.php等。我可以通过以下代码访问登录的用户名

public function getAuthService()
{
    $this->authservice = $this->getServiceLocator()->get('AuthService'); 
    return $this->authservice;  
}

$username = $this->getAuthService()->getStorage()->read(); 
但我无法访问layout.phtml中登录用户的用户名值

所以,如果有人知道,或者有简单的想法或实践,请让我知道

Module.php:

<?php 

namespace Admin;

use Admin\Model\Profile;
use Admin\Model\ProfileTable;

use Admin\Model\Provinces;
use Admin\Model\ProvincesTable;

use Admin\Model\Districts;
use Admin\Model\DistrictsTable; 

use Admin\Model\User;
use Admin\Model\UserTable;

use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\TableGateway;

use Zend\Mvc\ModuleRouteListener;
use Zend\Mvc\MvcEvent;

use Zend\ModuleManager\Feature\AutoloaderProviderInterface; 

use Zend\Authentication\Adapter\DbTable as DbTableAuthAdapter;
use Zend\Authentication\AuthenticationService;

class Module implements AutoloaderProviderInterface
//class Module
{

public function getConfig()
{
    return include __DIR__ . '/config/module.config.php';
}

public function getServiceConfig()
{
    return array(
        'abstract_factories' => array(),
        'aliases' => array(),

        'factories' => array( 

        // SERVICES
          'AuthService' => function($sm) {
            $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
            $dbTableAuthAdapter = new DbTableAuthAdapter($dbAdapter, 'user','username','password', 'MD5(?)');

            $authService = new AuthenticationService();
            $authService->setAdapter($dbTableAuthAdapter);
            return $authService;
          },    

          // DB
          'UserTable' =>  function($sm) {
            $tableGateway = $sm->get('UserTableGateway');
            $table = new UserTable($tableGateway);
            return $table;
          },
          'UserTableGateway' => function ($sm) {
            $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
            $resultSetPrototype = new ResultSet();
            $resultSetPrototype->setArrayObjectPrototype(new User());
            return new TableGateway('user', $dbAdapter, null,   
            $resultSetPrototype);
          },

          // FORMS
          'LoginForm' => function ($sm) {
            $form = new \Admin\Form\LoginForm();
            $form->setInputFilter($sm->get('LoginFilter'));
            return $form;
          },


           // FILTERS
          'LoginFilter' => function ($sm) {
            return new \Admin\Form\LoginFilter();
           },


            'Admin\Model\ProvincesTable' =>  function($sm) {
                $tableGateway = $sm->get('ProvincesTableGateway');
                $table = new ProvincesTable($tableGateway);
                return $table;
            },
            'ProvincesTableGateway' => function ($sm) {
                $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                $resultSetPrototype = new ResultSet();
                $resultSetPrototype->setArrayObjectPrototype(new Provinces());
                return new TableGateway('provinces', $dbAdapter, null, $resultSetPrototype);
            },

            'Admin\Model\DistrictsTable' =>  function($sm) {
                $tableGateway = $sm->get('DistrictsTableGateway');
                $table = new DistrictsTable($tableGateway);
                return $table;
            },
            'DistrictsTableGateway' => function ($sm) {
                $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                $resultSetPrototype = new ResultSet();
                $resultSetPrototype->setArrayObjectPrototype(new Districts());
                return new TableGateway('districts', $dbAdapter, null, $resultSetPrototype);
            },



        ),

        'invokables' => array(),
        'services' => array(),
        'shared' => array(),

    );
} 

public function getAutoloaderConfig()
{
    return array( 
        'Zend\Loader\StandardAutoloader' => array(
            'namespaces' => array(
        // if we're in a namespace deeper than one level we need to fix the \ in the path
                __NAMESPACE__ => __DIR__ . '/src/' . str_replace('\\', '/' , __NAMESPACE__),
            ),
        ),
    );
}

}

建议使用
identity
()查看帮助程序。然后,在任何视图模型中,您都可以使用它,如下所示:

if ($user = $this->identity()) {
     echo 'Logged in as ' . $this->escapeHtml($user->getUsername());
 } else {
     echo 'Not logged in';
 }
为了使其正常工作,您必须以特定的名称注册身份验证服务-
Zend\authentication\AuthenticationService

因此,在您的
module.config.php
文件中,添加到
service\u manager

'service_manager' => array(
    'aliases' => array(
        'Zend\Authentication\AuthenticationService' => 'AuthService', // <--- this line
    ),
    'invokables' => array(
        'AuthService' => 'Your\Authentication\Class',
    ),
),
然后在布局或任何其他.phtml文件中:

layout.phtml
...
<?php if ($this->identity()): ?>
<p>Welcome, <?php echo $this->identity()->getUsername(); ?></p>
<?php endif; ?>
layout.phtml
...
欢迎,


根据SzymonM先生的回答,我按照他的建议更改了Module.php,并在layout.phtml中编写了以下简单代码

这解决了我的问题,用户名以大写字母显示

<?php 
    if ($this->identity())
    {  
        echo ucfirst($this->identity());    
    } 
?>  
//ucfirst is php function which make first letter Uppercase.

//ucfirst是使第一个字母大写的php函数。

您使用什么模块进行身份验证?你自己的?还是外部模块?我有我自己的模块。非常感谢亲爱的兄弟,你帮助解决了我的问题。非常感谢你。
<?php 
    if ($this->identity())
    {  
        echo ucfirst($this->identity());    
    } 
?>  
//ucfirst is php function which make first letter Uppercase.