2016-08-28 43 views
0

每一個。我對ZendFramework2非常陌生。我有一個最簡單的項目,我有兩個模塊---用戶模塊和管理模塊。用戶模塊有登錄和註冊,管理模塊在其菜單中有配置文件和註銷。我想爲管理員和用戶模塊提供不同的菜單。我使用了導航,並在其module.config.php中爲管理員設置了菜單,該菜單正常工作。我也在他們的視圖中爲用戶和管理模塊使用了不同的佈局。但是當我嘗試使用用戶模塊的導航時,它將訪問管理模塊的導航。 請幫助我,因爲除了你們偉大的人和觀衆之外,我沒有老師和沒有支持者。不同模塊的不同菜單

我的代碼如下:

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



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

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

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

'navigation' => array(
    'default' => array(
     array(
      'label' => 'Login', 
      'route' => 'login', 
     ), 

     array(
      'label' => 'Register', 
      'route' => 'register', 
     ), 
    ), 
), 

); 

layout.phtml用戶模塊:

<?php echo $this->doctype(); ?> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
<?php echo $this->headTitle('ZF2 '. $this->translate('Transport Information System'))->setSeparator(' - ')->setAutoEscape(false) ?> 
<?php echo $this->headMeta() 
     ->appendName('viewport', 'width=device-width, initial-scale=1.0') 
     ->appendHttpEquiv('X-UA-Compatible', 'IE=edge') 
    ?> 
<!-- Le styles --> 
    <?php echo $this->headLink(array('rel' => 'shortcut icon', 'type' => 'image/vnd.microsoft.icon', 'href' => $this->basePath() . '/img/favicon.ico')) 
        ->prependStylesheet($this->basePath('css/style.css')) 
        ->prependStylesheet($this->basePath('css/bootstrap-theme.min.css')) 
        ->prependStylesheet($this->basePath('css/bootstrap.min.css')) ?> 

    <!-- Scripts --> 
    <?php echo $this->headScript() 
     ->prependFile($this->basePath('js/bootstrap.min.js')) 
     ->prependFile($this->basePath('js/jquery.min.js')) 
     ->prependFile($this->basePath('js/respond.min.js'), 'text/javascript', array('conditional' => 'lt IE 9',)) 
     ->prependFile($this->basePath('js/html5shiv.min.js'), 'text/javascript', array('conditional' => 'lt IE 9',)) 
    ; ?> 

</head> 
<body> 
    <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation"> 
     <div class="container"> 
      <div class="navbar-header"> 
       <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
       </button> 
       <a class="navbar-brand" href="<?php echo $this->url('home') ?>"><img src="<?php echo $this->basePath('img/zf2-logo.png') ?>" alt="Zend Framework 2"/>&nbsp;<?php echo $this->translate('Transport Information System') ?></a> 
      </div> 

      <div class="collapse navbar-collapse"> 
       <?php 

       echo $this->navigation('navigation') 
          ->menu() 
          ->setMinDepth(0) 
          ->setMaxDepth(0) 
          ->setUlClass('nav navbar-nav'); 

       ?> 
      </div> 


     </div> 
    </nav> 
    <div class="container"> 
     <?php echo $this->content; ?> 
     <hr> 
     <footer> 
      <p align="center">Copyright will be updated very soon [email protected]<?php echo $this->translate('All rights reserved.') ?></p> 
     </footer> 
    </div> <!-- /container --> 
    <?php echo $this->inlineScript() ?> 
</body> 

module.config .php for Admin模塊:

<?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/logout', 
       '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', 
     ), 

    ), 
), 
); 

layout.phtml爲管理模塊:

<?php echo $this->doctype(); ?> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
<?php echo $this->headTitle('ZF2 '. $this->translate('Transport Information System'))->setSeparator(' - ')->setAutoEscape(false) ?> 

    <?php echo $this->headMeta() 
     ->appendName('viewport', 'width=device-width, initial-scale=1.0') 
     ->appendHttpEquiv('X-UA-Compatible', 'IE=edge') 
    ?> 

    <!-- Le styles --> 
    <?php echo $this->headLink(array('rel' => 'shortcut icon', 'type' => 'image/vnd.microsoft.icon', 'href' => $this->basePath() . '/img/favicon.ico')) 
        ->prependStylesheet($this->basePath('css/style.css')) 
        ->prependStylesheet($this->basePath('css/bootstrap-theme.min.css')) 
        ->prependStylesheet($this->basePath('css/bootstrap.min.css')) ?> 

    <!-- Scripts --> 
    <?php echo $this->headScript() 
     ->prependFile($this->basePath('js/bootstrap.min.js')) 
     ->prependFile($this->basePath('js/jquery.min.js')) 
     ->prependFile($this->basePath('js/respond.min.js'), 'text/javascript', array('conditional' => 'lt IE 9',)) 
     ->prependFile($this->basePath('js/html5shiv.min.js'), 'text/javascript', array('conditional' => 'lt IE 9',)) 
    ; ?> 

</head> 
<body> 
    <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation"> 
     <div class="container"> 
      <div class="navbar-header"> 
       <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
       </button> 
       <a class="navbar-brand" href="<?php echo $this->url('home') ?>"><img src="<?php echo $this->basePath('img/zf2-logo.png') ?>" alt="Zend Framework 2"/>&nbsp;<?php echo $this->translate('Transport Information System') ?></a> 
      </div> 


      <div class="collapse navbar-collapse"> 
       <?php // <-- Update this !! 

       echo $this->navigation('navigation') 
          ->menu() 
          ->setMinDepth(0) 
          ->setMaxDepth(0) 
          ->setUlClass('nav navbar-nav'); 

       ?> 
      </div> 


     </div> 
    </nav> 
    <div class="container"> 
     <?php echo $this->content; ?> 
     <hr> 
     <footer> 
      <p align="center">Copyright will be updated very soon [email protected]<?php echo $this->translate('All rights reserved.') ?></p> 
     </footer> 
    </div> <!-- /container --> 
    <?php echo $this->inlineScript() ?> 
</body> 

回答

0

我在看我的代碼,因爲我有一個管理員導航菜單。

在您的管理模塊中,您將需要以下文件,這些文件保存在Zend \ Navigation \ Service文件夾中。

namespace Admin\Zend\Navigation\Service; 

use Zend\Navigation\Service\DefaultNavigationFactory; 

class AdminNavigationFactory extends DefaultNavigationFactory 
{ 
    protected function getName() 
    { 
     return 'admin_navigation'; 
    } 
} 

在你的module.config中你將需要。

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

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

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

    ), 
), 

最後在您的管理模塊layout.phtml文件中您將需要。

echo $this->navigation('admin_navigation') 
          ->menu() 
          ->setMinDepth(0) 
          ->setMaxDepth(0) 
          ->setUlClass('nav navbar-nav'); 

希望這會使它爲你工作。

你可能也想看這個Zend Framework 2 Secondary Navigation With Acl

相關問題