-1

私は、このナビゲーションビュースクリプトがあります:getServiceLocator()が廃止されているのでZF2からZF3への移行:ナビゲーションビューの調整方法私ZF2アプリケーションで

$routeMatch = $this->getHelperPluginManager() 
    ->getServiceLocator() 
    ->get('Application') 
    ->getMvcEvent() 
    ->getRouteMatch(); 
$currentRoute = $routeMatch instanceof \Zend\Mvc\Router\RouteMatch ? $routeMatch->getMatchedRouteName() : null; 
?> 
<?php foreach ($this->container as $page) : ?> 
<li <?php echo $currentRoute == $page->getRoute() ? ' class="active"' : null;?>> 
    <?php echo $this->navigation()->menu()->htmlify($page, true, false) . PHP_EOL; ?> 
</li> 
<?php endforeach; ?> 

を、私は、ナビゲーションビュースクリプトに現在のルートについての情報を取得するための別の方法が必要です。

このビュースクリプトは、部分設定とlayout.phtmlに呼び出されます:

echo $this->navigation('navigation')->menu()->setPartial('navigation/default'); 

だから私はテンプレート変数を経由して必要情報を渡すためにアイデアを得ました。私はModule#onDispatch(...)で1を作成しました:

public function onDispatch(MvcEvent $mvcEvent) 
{ 
    $viewModel = $mvcEvent->getApplication()->getMvcEvent()->getViewModel(); 
    $routeMatch = $mvcEvent->getRouteMatch(); 
    $viewModel->currentRoute = $routeMatch instanceof RouteMatch 
     ? $routeMatch->getMatchedRouteName() : null 
    ; 
} 

今、私はlayout.phtmlでそれにアクセスすることができます。しかし、Zend\View\Helper\Navigation\Menu#setPartial(...)が変数の引数を受け付けないので、ナビゲーションビューのスクリプトに渡す方法はありません。

Zend Framework 3のナビゲーションビューに変数(特に現在のルートに関する情報)を渡すにはどうすればよいですか?

答えて

-1

DefaultNavigationFactoryを使用して行う最も簡単な方法です。

は、私たちが今、私たちは、トップレベルのキーnavigationの下、当社のナビゲーション構成を定義し、Zendのナビゲーションを可能にする、次の

'router' => [ 
    'routes' => [ 
     'world' => [ 
      'type' => Literal::class, 
      'options' => [ 
       'route' => '/world', 
       'defaults' => [ 
        'controller' => Controller\IndexController::class, 
        'action'  => 'index', 
       ], 
      ], 
      'may_terminate' => true, 
      'child_routes' => [ 
       'country' => [ 
        'type' => Literal::class, 
        'options' => [ 
         'route' => '/country', 
         'defaults' => [ 
          'controller' => Controller\WorldController::class, 
          'action' => 'country', 
         ], 
        ], 
       ], 
      ], 
     ], 
    ], 
], 

として、いくつかのルートを持っているとしましょう。あなたは今、私たちはトップ・キーnavigationから使用してナビゲーションビューヘルパーを呼び出すことができるだろう私たちのナビゲーションの設定は、次の

// configure the navigation 
'navigation' => [ 
    'default' => [ 
     [ 
      'label' => 'Home', 
      'route' => 'home', 
     ], 
     [ 
      'label' => 'World', 
      'route' => 'world', // this should be the route name not route pattern like '/world' 
      'pages' => [ 
       [ 
        'label' => 'Country', 
        'route' => 'world/country', 
       ], 
      ], 
     ], 
    ], 
], 

// Register the navigation 
'service_manager' => [ 
    'factories' => [ 
     'navigation' => Zend\Navigation\Service\DefaultNavigationFactory::class, 
    ], 
], 

ようになる上記のルートの設定に応じて、あなたのconfig/autoload/global.php

にこのコードを置いてもよいです上記の設定をビュースクリプトに追加します。下記を参照

<div class="collapse navbar-collapse"> 
    <?php 
     echo $this->navigation('navigation') 
      ->menu() 
      ->setUlClass('nav navbar-nav') 
      ->renderMenu(); 
     ?> 
</div> 

これだけです!

次に、ナビゲーションヘルパーのセッターメソッドを使用して、ユーザーにルートを制限し、ACLオブジェクトまたはユーザーロールオブジェクトを設定する方法を示します。ここで$this->loggedInUser$this->acl$this->userRoleは、ビュースクリプトに注入されたので、

<div class="collapse navbar-collapse" id="main-menu"> 

    <?php if ($this->loggedInUser !== null) : ?> 
     <?php $this->navigation('navigation') 
       ->findBy('route', 'hello') 
       ->setParams(array('username' => $this->loggedInUser->getUsername())); ?> // If you need to pass any params 

     <?php $this->navigation('navigation') 
       ->findBy('route', 'world'); ?> 

    <?php endif; ?> 

    <?php 
     echo $this->navigation('navigation') 
      ->menu() 
      ->setUlClass('nav navbar-nav') 
      ->setAcl($this->acl) // ACL object 
      ->setRole($this->userRole) // Role Object 
      ->renderMenu(); 
    ?> 

</div> 

これはあなたを助けるでしょうね!

+0

答えていただきありがとうございますが、既に動作しています。問題は、 'アクティブな' 'プロパティー 'の設定と、一般的にナビゲーションビュースクリプトに変数を渡すことです。 – automatix

+0

いつでも歓迎です!それをしてうれしい! – unclexo

+0

もう一度お返事ありがとうございます!それは問題を解決しました。 – automatix

関連する問題