2017-04-11 3 views
1

ZF2에 로그인 및 로그 아웃 시스템이 있습니다. 로그인했을 때 로그인 한 사용자의 사용자 이름을 표시하고 싶습니다. 스크린 샷은 다음과 같습니다 : enter image description herezf2에 로그인 한 사용자의 사용자 이름 표시

보기/지방/index.phtml,보기/지구/index.phtml,

view/layout/layout.phtml에 layout.phtml이 있습니다. 여기서는 모든보기에 대한 admin 레이아웃을 설명했습니다. 그래서 사용자 이름은에 로그인해야합니다. layout.phtml.

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

$username = $this->getAuthService()->getStorage()->read(); 
:

나는 또한 코드에 의해 컨트롤러/ProvincesController.php 등의 로그인 한 사용자 이름을 액세스 할 수있는 컨트롤러/ProvincesController.php, 컨트롤러/DistrictsController.php 등과 같은 컨트롤러에 대응 한

그러나 로그인 한 사용자의 사용자 이름에 액세스 할 수 없습니다. 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__), 
      ), 
     ), 
    ); 
} 

} 

감사합니다.

+0

인증에는 어떤 모듈을 사용합니까? 너 스스로? 또는 외부 모듈? – SzymonM

+0

나는 내 자신의 모듈을 가지고있다. – Skylink

답변

2

identity (https://framework.zend.com/manual/2.4/en/modules/zend.view.helpers.identity.html)보기 도우미를 사용하는 것이 좋습니다. 그런 다음 어떤 뷰 모델에서 당신은 다음과 같이 사용할 수 있습니다 :

if ($user = $this->identity()) { 
    echo 'Logged in as ' . $this->escapeHtml($user->getUsername()); 
} else { 
    echo 'Not logged in'; 
} 

을 위해 당신이 특정 이름 - Zend\Authentication\AuthenticationService 아래 인증 서비스를 등록해야 작동하도록.

그래서 당신 module.config.php 파일에서 service_manager에 추가 :
'service_manager' => array(
    'aliases' => array(
     'Zend\Authentication\AuthenticationService' => 'AuthService', // <--- this line 
    ), 
    'invokables' => array(
     'AuthService' => 'Your\Authentication\Class', 
    ), 
), 

은 그럼 당신은 identity 컨트롤러 플러그인 및보기 도우미를 사용할 수 있어야합니다. 귀하의 경우에는

, Module.php는 다음과 같이한다 : 레이아웃 또는 기타로 .phtml 파일에서 다음

... 
public function getServiceConfig() 
{ 
    return array(
     'abstract_factories' => array(), 
     'aliases' => array(
      'Zend\Authentication\AuthenticationService' => 'AuthService', // <--- this line 
     ), 

     '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(), 

    ); 
} 
... 

:

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

나는 나의 대답을 업데이트했다 – SzymonM

+0

친애하는 형제, 내 문제를 해결하는 데 도움을 주셔서 감사합니다. 고맙습니다. – Skylink

0

씨 SzymonM의 대답의 도움을 촬영, 나는 변경 내 Module.php가 제안한대로 layout.phtml에 다음과 같은 간단한 코드를 작성하십시오.

이렇게하면 내 문제가 해결되고 사용자 이름은 대문자로 된 첫 글자로 표시됩니다.

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