2016-08-26 184 views
0

我做了登錄/註冊模塊。我還將LoginController中的indexAction更改爲loginAction,但仍然無法使用Logout。我盡我所能,但我不知道問題是什麼。 我的代碼如下:註銷不起作用

LoginController.php

namespace Users\Controller; 
use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel; 
use Zend\Authentication\AuthenticationService; 
use Zend\Authentication\Adapter\DbTable as DbTableAuthAdapter; 
use Users\Form\LoginForm; 
use Users\Form\LoginFilter; 
use Users\Model\User; 
use Users\Model\UserTable; 
class LoginController extends AbstractActionController 
{ 
    protected $storage; 
    protected $authservice; 

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

public function indexAction() 
{ 
    $this->layout("layout/layout_users"); 

    if ($this->getAuthService()->hasIdentity())  
    {        
     return $this->redirect()->toRoute('admin',   
     array('action'=>'index'));   
    } 

    $form = $this->getServiceLocator()->get('LoginForm'); 

    $viewModel = new ViewModel(array('form' => $form)); 
    return $viewModel;  
} 

public function processAction() 
{ 
    if (!$this->request->isPost()) { 
     return $this->redirect()->toRoute(NULL , array( 
        'controller' => 'login', 
        'action' => 'index' 
       )); 
    } 

    $post = $this->request->getPost(); 

    $form = new LoginForm(); 
    $inputFilter = new LoginFilter(); 
    $form->setInputFilter($inputFilter); 

    $form->setData($post); 
    if (!$form->isValid()) { 
     $model = new ViewModel(array(
      'error' => true, 
      'form' => $form, 
     )); 
     $model->setTemplate('users/login/index'); 
     return $model; 
    } else { 
     //check authentication... 
     $this->getAuthService()->getAdapter() 

     ->setIdentity($this->request->getPost('email'))    
     ->setCredential($this->request->getPost('password')); 

     $result = $this->getAuthService()->authenticate(); 
     if ($result->isValid()) { 

$this->getAuthService()->getStorage()->write($this->request->getPost('email')); 
      return $this->redirect()->toRoute('admin' , array()); 

     } else { 
      $model = new ViewModel(array(
       'error' => true, 
       'form' => $form, 
      )); 
      $model->setTemplate('users/login/index'); 
      return $model; 
     } 


    } 
} 

public function logoutAction() 
{ 
    if ($this->getAuthService()->hasIdentity()) { 
     $this->getAuthService()->clearIdentity(); 
    } 
    return $this->redirect()->toRoute('users/login',   
    array('action'=>'index')); 
} 



} 

module.config.php爲用戶模塊

<?php 
return array(
'controllers' => array(
    'invokables' => array( 
     'Users\Controller\Register' => 'Users\Controller\RegisterController', 
     'Users\Controller\Login' => 'Users\Controller\LoginController',    
    ), 
), 

'router' => array(
    'routes' => array(
     'users' => array(
      'type' => 'Literal', 
      'options' => array( 
       'route' => '/users',     
       'defaults' => array(
        'controller' => 'Users\Controller\Login', 
        'action'  => 'index', 
       ), 
      ), 
      'may_terminate' => true, 
      'child_routes' => array(      
       'login' => array(
        'type' => 'Segment', 
        'may_terminate' => true, 
        'options' => array(
         'route' => '/login[/:action]', 
         'constraints' => array(
          'action'  => '[a-zA-Z][a-zA-Z0-9_-]*', 
         ), 
         'defaults' => array(
          'controller' => 'Users\Controller\Login', 
          'action'  => 'index', 
         ),        
        ), 
       ), 

       'register' => array(
        'type' => 'Segment', 
        'may_terminate' => true, 
        'options' => array(
         'route' => '/register[/:action]', 
         'constraints' => array(
          'action'  => '[a-zA-Z][a-zA-Z0-9_-]*', 
         ), 
         'defaults' => array(
          'controller' => 'Users\Controller\Register', 
          'action'  => 'index', 
         ), 
        ), 
       ), 
      ), 
     ), 
    ), 
), 

'view_manager' => array(
    'template_map' => array(
     'layout/layout_users' => __DIR__ . '/../view/layout/layout.phtml', 
    ), 

    'template_path_stack' => array(
     'users' => __DIR__ . '/../view', 
    ), 
), 


); 

module.config.php的管理模塊:

<?php 

namespace Admin; 

return array(
'router' => array(
    'routes' => array(
     'home' => array(
      'type' => 'Zend\Mvc\Router\Http\Literal', 
      'options' => array(
       'route' => '/', 
       'defaults' => array(
        'controller' => 'Admin\Controller\Index', 
        'action'  => 'index', 
       ), 
      ), 
     ), 



     'profile' => array(
      'type' => 'Segment', 
      'may_terminate' => true, 
      'options' => array(
       'route' => '/profile[/:action]', 
       'constraints' => array(
        'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 
       ), 
       'defaults' => array(
        'controller' => 'Admin\Controller\Profile', 
        'action' => 'index', 
       ), 
      ), 
     ), 

     'logout' => array(
      'type' => 'Segment', 
      'may_terminate' => true, 
      'options' => array(
       'route' => '/users/login', 
       'defaults' => array(
        'controller' => 'Users\Controller\Login', 
        'action' => 'logout', 
       ), 
      ), 
     ), 

'admin' => array(
      'type' => 'Literal', 
      'options' => array(
       'route' => '/admin', 
       'defaults' => array(
        '__NAMESPACE__' => 'Admin\Controller', 
        'controller' => 'Index', 
        'action'  => 'index', 
       ), 
      ), 
      'may_terminate' => true, 
      'child_routes' => array(
       'default' => array(
        'type' => 'Segment', 
        'options' => array(
         'route' => '/[:controller[/:action]]', 
         'constraints' => array(
          'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 
          'action'  => '[a-zA-Z][a-zA-Z0-9_-]*', 
         ), 
         'defaults' => array(
         ), 
        ), 
       ), 
      ), 
     ), 
    ), 
), 

'service_manager' => array(
    'abstract_factories' => array(
     'Zend\Cache\Service\StorageCacheAbstractServiceFactory', 
     'Zend\Log\LoggerAbstractServiceFactory', 
    ), 
    'factories' => array(
     'translator' => 'Zend\Mvc\Service\TranslatorServiceFactory', 
     'navigation' => 'Zend\Navigation\Service\DefaultNavigationFactory', 
    ), 
), 
'translator' => array(
    'locale' => 'en_US', 
    'translation_file_patterns' => array(
     array(
      'type'  => 'gettext', 
      'base_dir' => __DIR__ . '/../language', 
      'pattern' => '%s.mo', 
     ), 
    ), 
), 

'controllers' => array(
    'invokables' => array(
     // 'Admin\Controller\Index' => Controller\IndexController::class 
     'Admin\Controller\Index' => 'Admin\Controller\IndexController', 
     'Admin\Controller\Profile' => 'Admin\Controller\ProfileController', 

     'Admin\Controller\Provinces' => 'Admin\Controller\ProvincesController', 
     'Admin\Controller\Districts' => 'Admin\Controller\DistrictsController', 
     'Admin\Controller\Cities' => 'Admin\Controller\CitiesController', 
     'Admin\Controller\Stations' => 'Admin\Controller\StationsController',   
     'Admin\Controller\Services' => 'Admin\Controller\ServicesController', 
     'Admin\Controller\Vehicles' => 'Admin\Controller\VehiclesController', 

    ), 
), 
'view_manager' => array(
    'display_not_found_reason' => true, 
    'display_exceptions'  => true, 
    'doctype'     => 'HTML5', 
    'not_found_template'  => 'error/404', 
    'exception_template'  => 'error/index', 
    'template_map' => array(


     'layout/layout_admin'   => __DIR__ . '/../view/layout/layout.phtml', 
     'admin/index/index' => __DIR__ . '/../view/admin/index/index.phtml', 
     'error/404'    => __DIR__ . '/../view/error/404.phtml', 
     'error/index'    => __DIR__ . '/../view/error/index.phtml', 
    ), 
    'template_path_stack' => array(
     __DIR__ . '/../view', 
    ), 
), 

// Placeholder for console routes 
'console' => array(
    'router' => array(
     'routes' => array(
     ), 
    ), 
), 

'navigation' => array(
    'default' => array(
     array(
      'label' => 'Home', 
      'route' => 'home', 
     ), 

     array(
      'label' => 'Profile', 
      'route' => 'profile', 
     ), 

     array(
      'label' => 'Logout', 
      'route' => 'logout', 
     ), 

    ), 
), 
); 

在用戶模塊中查看的目錄是: view/users/login/in dex.phtml

回答

2

您在路線和控制器中出現錯誤。

在控制器

public function logoutAction() 
{ 
    if ($this->getAuthService()->hasIdentity()) { 
     $this->getAuthService()->clearIdentity(); 
    } 
    return $this->redirect()->toRoute('users/login', //Change to 'home' 
    array('action'=>'index')); 
} 

在module.config

'logout' => array(
    'type' => 'Segment', 
    'may_terminate' => true, 
    'options' => array(
     'route' => '/users/login', //Change to '/users/logout' 
     'defaults' => array(
      'controller' => 'Users\Controller\Login', 
      'action' => 'logout', 
     ), 
    ), 
), 
+0

非常感謝你的朋友,問題就解決了。現在它工作正常。 –

+0

@AyazKhan歡迎。請將我的答案設爲最好的。 – newage

+0

請驗證答案,以便關閉主題 – Unex