我在我的项目中使用zend framework3。我可以按照文档link
创建静态导航现在我必须从数据库中获取菜单数据然后创建导航。 为此我正在使用我已经将配置提供到module.config.php中,这是相册模块的配置文件。
<?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',
],
],
];
在zend framework2中,我们简单地将工厂类的导航键作为
传递 return array(
'factories' => array(
'Navigation' => 'Album\Navigation\AlbumNavigationFactory'
),
);
在zend framework3中,我正在做同样的事情
'service_manager' => [
'factories' => [
'navigation' => Navigation\AlbumNavigationFactory::class,
Model\AlbumTable::class => Factory\AlbumTableFactory::class,
],
],
我使用Navigation \ AlbumNavigationFactory :: class来调用工厂来获取数据。 但我无法获得导航。任何帮助,将不胜感激。
答案 0 :(得分:1)
这是我的代码的一部分。我认为会有所帮助。工作完美。
在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 Blog \ Navigation \ 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;
}
}
答案 1 :(得分:1)
CD。
在module.config.php
中'navigation' => array(
'default' => array(
'blog' => array(
'label' => 'Blog',
'route' => 'blog-front',
'controller' => 'blog',
'action' => 'index',
)
)
)
答案 2 :(得分:0)
我不知道您是否正在寻找,但我建议您查看此页面: