zend framework 2 Dynamic Breadcrumbs – Параметры прохождения

Я новичок в Zend Framework 2, и я пытаюсь создать динамические Breadcrumbs, используя ZF2, но безуспешно.

Я использовал http://adam.lundrigan.ca/2012/07/quick-and-dirty-zf2-zend-navigation/ в качестве базы для своей работы, и, как описано, я построил карту сайта для маршрутов, открытых моими модулями.

Пример:

// config/autoload/nav_zfcuser.global.php <?php return array( // All navigation-related configuration is collected in the 'navigation' key 'navigation' => array( // The DefaultNavigationFactory we configured in (1) uses 'default' as the sitemap key 'default' => array( // And finally, here is where we define our page hierarchy 'home' => array( 'label' => 'Home', 'route' => 'home', 'pages' => array( 'sitemap' => array( 'label' => 'Sitemap', 'title' => 'Sitemap', 'route' => 'sitemap', ), 'aboutus' => array(...), 'privacy' => array(...), ), ), ), ), ); 

Затем для отображения панировочных сухарей используется следующий помощник вида:

 <?php echo $this->navigation()->breadcrumbs('Navigation'); ?> 

Это работает отлично, и, например, если я перемещаюсь по mywebsite.com/sitemap, то будут созданы обработанные bredcrumbs.

Главная> Карта сайта

Проблема заключается в том, что я начинаю иметь динамические URL-адреса (например, с идентификаторами продукта).

На module.config.php маршрутизация …

 <?php return array( 'router' => array( 'routes' => array( (...) 'productHome' => array( 'type' => "Literal", 'options' => array( 'route' => "/product", 'defaults' => array( '__NAMESPACE__' => "Application\Controller", 'controller' => "Product", 'action' => "index", ), ), 'may_terminate' => true, 'child_routes' => array( 'product' => array( 'type' => "Segment", 'options' => array( 'route' => "/:idProduct[/:name]", 'defaults' => array( '__NAMESPACE__' => "Application\Controller", 'controller' => "Product", 'action' => "product", ), ), 'may_terminate' => true, ), ), 

Маршрутизация, определенная выше ( module.config.php ), преобразуется в следующую структуру URL:

mysite.com/Product/:idProduct[/:name]

Поэтому создание карты сайта для отражения этой структуры должно быть:

 // config/autoload/nav_zfcuser.global.php <?php return array( // All navigation-related configuration is collected in the 'navigation' key 'navigation' => array( // The DefaultNavigationFactory we configured in (1) uses 'default' as the sitemap key 'default' => array( // And finally, here is where we define our page hierarchy 'home' => array( 'label' => 'Home', 'route' => 'home', 'pages' => array( 'sitemap' => array(...), 'productHome' => array( 'label' => 'Product', 'route' => 'product', 'controller' => 'Product', 'action' => 'index', 'pages' => array( 'product' => array( 'label' => 'Product', 'controller' => 'Product', 'action' => 'product', 'route' => 'product/:idProduct[/:name]', ), ), ), ), ), ), ), ); 

Обновление страницы продуктов в браузере mywebsite.com/product/flv6n768/ProductName no Breadcrumbs отображается.

Как я могу передать параметры idProduct и 'name', чтобы при вызове помощника вида

  <?php echo $this->navigation()->breadcrumbs('Navigation'); ?> 

Он отображает: Главная> Продукт> idProduct (не видно)> название продукта?

Если это предназначено только для сухарей, вы можете сделать следующее:

Измените свой навигационный массив, как показано ниже: удалите конкретную спецификацию страницы продукта. и добавьте идентификатор к странице продуктов.

 <?php return array( // All navigation-related configuration is collected in the 'navigation' key 'navigation' => array( // The DefaultNavigationFactory we configured in (1) uses 'default' as the sitemap key 'default' => array( // And finally, here is where we define our page hierarchy 'home' => array( 'label' => 'Home', 'route' => 'home', 'pages' => array( 'sitemap' => array(...), 'productHome' => array( 'id' => 'productHome',//<<< Page unique ID 'label' => 'Product', 'route' => 'product', 'controller' => 'Product', 'action' => 'index', ), ), ), ), ), ), ); 

В Application \ Controller \ Product :: product () добавьте в конце следующий код. Это добавляет «динамически» новую подстраницу к странице индекса продукта в статической структуре навигации. Также обратите внимание, что я предполагаю, что у вас есть фактический экземпляр продукта, доступный в переменной $ product.

  $navigation = $this->getServiceLocator()->get('Navigation'); $page = $navigation->findBy('id', 'productHome'); $page->addPage(array( 'uri' => $this->getRequest()->getRequestUri(),//current page URI 'label' => $product->getName(),//<<<<< product name 'active' => true, ));