2017-04-11 6 views
1

Ich habe ein System zum Anmelden und Abmelden in ZF2. Ich möchte den Benutzernamen des eingeloggten Benutzers anzeigen, wenn er/sie eingeloggt ist. Screenshot ist unten angegeben: enter image description hereBenutzernamen des angemeldeten Benutzers in zf2 anzeigen

Ich habe verschiedene Ansichten wie view/provinces/index.phtml, view/districts/index.phtml, usw.

Ich habe layout.phtml in view/layout/layout.phtml, in dem ich Layout für Admin beschrieben, die für jede Ansicht ist. So ist es notwendig, auf Benutzername des angemeldeten Benutzers in layout.phtml zuzugreifen.

Ich habe auch entsprechende Steuerungen wie Controller/ProvincesController.php, Controller/DistrictsController.php etc. Ich Benutzername von angemeldet Benutzer in Controller/ProvincesController.php usw. durch den Code zugreifen:

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

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

Aber ich bin nicht in der Lage, Zugriff auf Wert von Benutzername des angemeldeten Benutzers in layout.phtml.

Also, wenn jemand davon weiß oder eine einfache Idee oder Praxis darüber, dann lassen Sie mich bitte wissen.

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__), 
      ), 
     ), 
    ); 
} 

} 

Vielen Dank im Voraus.

+0

Welches Modul verwenden Sie für die Authentifizierung? Dein eigenes? Oder externes Modul? – SzymonM

+0

Ich habe mein eigenes Modul. – Skylink

Antwort

2

Der empfohlene Weg wäre, identity (https://framework.zend.com/manual/2.4/en/modules/zend.view.helpers.identity.html) View Helper zu verwenden. Dann in einem beliebigen Ansicht Modell könnte man es wie folgt verwendet werden:

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

Um es Sie arbeiten haben Ihren Authentifizierungsdienst unter bestimmten Namens- Zend\Authentication\AuthenticationService zu registrieren.

Also in Ihrem module.config.php Datei, in den service_manager:

'service_manager' => array(
    'aliases' => array(
     'Zend\Authentication\AuthenticationService' => 'AuthService', // <--- this line 
    ), 
    'invokables' => array(
     'AuthService' => 'Your\Authentication\Class', 
    ), 
), 

Dann sollten Sie in der Lage sein identity Controller Plugin und View Helfer zu verwenden.

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

    ); 
} 
... 

Dann in Ihrem Layout oder anderer .phtml Datei:

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

Ich aktualisierte meine Antwort – SzymonM

+0

Vielen Dank lieber Bruder, Sie haben geholfen, mein Problem zu lösen. Vielen Dank. – Skylink

0

Unter Hilfe von Herrn SzymonM Antwort, änderte ich meine

In Ihrem Fall Module.php soll wie folgt aussehen Module.php wie von ihm vorgeschlagen, und schreibe den folgenden einfachen Code in layout.phtml

Dies löst mein Problem und Benutzername wird mit dem ersten Buchstaben in Großbuchstaben angezeigt.

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