2016-08-28 2 views
0

каждый. Я очень новичок в ZendFramework2. У меня есть простейший проект, в котором у меня есть два модуля: модуль пользователей и модуль администратора. Пользовательский модуль имеет логин, а модуль регистрации и администрирования имеет профиль и выход из своего меню. Я хочу иметь разные меню для модуля admin и users. Я использовал навигацию и сделал меню для admin в своем module.config.php, который работает правильно. Я также использовал разные макеты для пользователей и модулей администратора. Но когда я пытаюсь использовать навигацию для модуля пользователей, он получает доступ к админ-модулю. Пожалуйста, помогите мне, потому что у меня нет учителя и нет сторонников, кроме вас, великих людей и зрителей.Различные меню для разных модулей

Мой код приведен ниже:

module.config.php для модуля Users

<?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 для модуля администратора:

<?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'; 
    } 
} 

В вашем модуле.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

Смежные вопросы