2016-11-17 6 views
1

내 프로젝트에서 zend framework3을 사용하고 있습니다. 나는 문서를 따라 정적 탐색을 만들 수있다 linkzf3에서 동적 탐색 생성

이제 데이터베이스에서 메뉴 데이터를 가져 와서 탐색을 만들어야한다. 이것을 위해 저는 앨범 모듈의 설정 파일 인 module.config.php에 설정을 제공합니다. 젠드 framework2에서

<?php 
    namespace Album; 

    use Zend\Router\Http\Literal; 
    use Zend\Router\Http\Segment; 
    use Zend\ServiceManager\Factory\InvokableFactory; 
    use Zend\Navigation\Service\DefaultNavigationFactory; 
    use Album\Navigation\AlbumNavigationFactory; 

    return [ 
    'controllers' => [ 
     'factories' => [ 
     Controller\AlbumController::class => Factory\AlbumControllerFactory::class, 
     Controller\IndexController::class => InvokableFactory::class, 
      ], 
     ], 

    // Add this section: 
    'service_manager' => [ 
     'factories' => [ 
      'navigation' => Navigation\AlbumNavigationFactory::class, 
      Model\AlbumTable::class => Factory\AlbumTableFactory::class, 
     ], 
     ], 
    // The following section is new and should be added to your file: 
    'router' => [ 
     'routes' => [ 
     'album' => [ 
      'type' => Segment::class, 
      'options' => [ 
       'route' => '/album[/:action[/:id]]', 
       'constraints' => [ 
        'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 
        'id'  => '[0-9]+', 
       ], 
       'defaults' => [ 
        'controller' => Controller\AlbumController::class, 
        'action'  => 'index', 
       ], 
      ], 
     ], 
     'index' => [ 
      'type' => Segment::class, 
      'options' => [ 
       'route' => '/index[/:action[/:id]]', 
       'constraints' => [ 
        'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 
        'id'  => '[0-9]+', 
       ], 
       'defaults' => [ 
        'controller' => Controller\IndexController::class, 
        'action'  => 'index', 
       ], 
       ], 
      ], 
     ], 
     ], 

    'view_manager' => [ 
     'template_path_stack' => [ 
      'album' => __DIR__ . '/../view', 
     ], 
    ], 
    ]; 

우리 간단한 패스 젠드 framework3에서 나는 다음과 같은 일을하고

return array(
     'factories' => array(
      'Navigation' => 'Album\Navigation\AlbumNavigationFactory' 
     ), 
    ); 

등의 팩토리 클래스와 네비게이션 키

'service_manager' => [ 
     'factories' => [ 
     'navigation' => Navigation\AlbumNavigationFactory::class, 
      Model\AlbumTable::class => Factory\AlbumTableFactory::class, 
     ], 
    ], 

내가 탐색 \를 사용하고 AlbumNavigationFactory :: class - 데이터를 가져 오기위한 팩토리를 호출합니다. 하지만 탐색을 할 수 없습니다. 어떤 도움을 주시면 감사하겠습니다.

답변

0

당신이 찾고있는 것을인지 모르겠어요,하지만 난이 페이지에 살펴보고 추천 :

https://github.com/fabiopaiva/zf2-navigation-bootstrap3

+0

@Andry 흠 내가 제공 한 URL을 확인했다. 내 질문은 내비게이션 키에 전달하는 배열이다. 'navigation'=> 배열 ( 'default'=> 배열 (배열 ( 'label'=> 'Home', 'route'=> 'home' , 'icon'=> 'glyphicon glyphicon-home' ) 데이터베이스에서이 배열을 원한다. 데이터베이스에서이 배열을 가져올 수있는 방법이 있으신가요? –

0

여기 내 코드의 일부입니다. 나는 도움이 될 것 같아. 완벽한 작업. Module.php에서

public function getServiceConfig() 
{ 
    return array( 
     'factories' => array(
      'ItemsFromDatabase::class => Navigation\BlogNavigationFactory::class, 
     ) 
      ); 
} 

public function getViewHelperConfig() { 
     return[ 
     'factories' => [ 
      'AddItemsInNavigation' => function($helpers) { 
       $navigation = $helpers->get('Application')->getServiceManager()->get('Zend\Navigation\Default')->findOneByLabel('Blog'); 
       $newItems = $helpers->get(ItemsFromDatabase::class); 
      return new View\Helper\AddItemsInNavigation($navigation, $newItems);  
        }, 

       ], 

블로그 \ 레이아웃에서보기 \ 도우미 \ AddItemsInNavigation.php

<?php 
namespace Blog\View\Helper; 

use Zend\View\Helper\AbstractHelper; 

class AddItemsInNavigation extends AbstractHelper { 

protected $navigation; 
protected $newItems; 

public function __construct($navigation, $newItems) { 
    $this->navigation = $navigation; 
    $this->newItems = $newItems; 
} 

public function addItems() { 
    return $this->navigation->addPages($this->newItems); 

} 

} 

 <?php 
     $this->AddItemsInNavigation()->addItems(); //plugin 

     $nawDef = $this->navigation('Zend\Navigation\Default')->menu(); 

     echo $nawDef->setMinDepth(0)->setMaxDepth(4)->setUlClass('nav navbar-nav'); 

       ?> 

W 블로그 \ 탐색 \ BlogNavigationFactory.php

<?php 
namespace Blog\Navigation; 

use Interop\Container\ContainerInterface; 
use Zend\Navigation\Navigation; 
use Zend\Navigation\Service\DefaultNavigationFactory; 

class BlogNavigationFactory extends DefaultNavigationFactory { 

protected $pages; 

public function __invoke(ContainerInterface $container, $requestedName, array $options = null) { 
    return new Navigation($this->getPages($container)); 
} 

protected function getPages(ContainerInterface $container) { 

    $navigation = array(); 

    if (null === $this->pages) { 

     $navigation[] = array (//for exemple 
      'label' => 'Jaapsblog.nl', 
      'uri' => 'http://www.jaapsblog.nl' 
     ); 

     $mvcEvent = $container->get('Application') 
       ->getMvcEvent(); 

     $routeMatch = $mvcEvent->getRouteMatch(); 
     $router = $mvcEvent->getRouter(); 
     $pages = $this->getPagesFromConfig($navigation); 

     $this->pages = $this->injectComponents(
       $pages, $routeMatch, $router 
     ); 
    } 

    return $this->pages; 
} 

} 
+0

위의 코드를 구현 한 후 감사합니다. Zend \ Navigation \ Default "를 팩토리로 해석 할 수 없습니다."이것에 대해 알고 계신지요? –

+0

Zend \ Navigation \ Default - "예외가 발생했습니다."라는 메시지가있는 Zend \ ServiceManager \ Exception \ ServiceNotFoundException '예외가 발생했습니다. 내 탐색의 이름입니다.이 파일은 module.config.php 파일에서 찾을 수 있습니다 (예 :). 0 'navigation'=> 배열 ( 'default'=> 배열 ( – marcin

+0

그걸 제공해 주시겠습니까? 고마워, 고마워. –

0

cd. module.config.php에서

'navigation' => array(
'default' => array( 

    'blog' => array(
      'label' => 'Blog', 
      'route' => 'blog-front', 
      'controller' => 'blog', 
      'action' => 'index', 
     ) 
) 
) 
+0

위의 코드 스 니펫을 module.config.php 파일에 추가했습니다.하지만 class 'Album \ view \ Helper \ AddItemsInNavigation'클래스가 해당 디렉토리에 존재하는 동안 Module.php 파일에서 오류를 찾을 수 없습니다. 너는 어떤 생각을 가지고 있니? –

+0

class AddItemsInNavigation.php 이것은 도우미입니다. 나는 클래스 AdditemsInNavigation.php를보아야하는 방법을 썼다. 나는 당신이 나의 것보다 다른 프로젝트를 만들 것을 볼 것이다. AddItemsInNavigation.php 네임 스페이스 Blog \ View \ Helper에서 변경해야합니다. 네임 스페이스 앨범 \보기 \ 도우미; – marcin

+0

AddItemsInNavigation (네임 스페이스 Album \ view \ Helper;)에서 올바른지 확인했습니다.보기를보기 폴더로 변경했지만 사용자의 제안에 따라 작업도하지 않습니다. 나는 ZF2에서 같은 방식으로 호출 할 수 있기 때문에 클래스가 발견되지 않는 이유를 알지 못합니다. –