gpt4 book ai didi

zend-framework2 - ZF2 - 在调用 Controller 之前将页面注入(inject)导航

转载 作者:行者123 更新时间:2023-12-02 05:03:33 25 4
gpt4 key购买 nike

我正在创建一个动态应用程序,其中的内容是通过 CMS 添加的。在 CMS 内部,我正在设置一个数据库条目,其中说明每个内容页面要使用的模块。

节点编号,父节点Id,名字_de,名字_zh,模块名称,foreignkey_ContentLinks,

此表中的条目如下所示:6、1、Veranstaltung-21-02-2013,事件 21-02-2013,事件,第682章

整个树应该在我的导航中结束(并且在我的路由中也很完美)。我不想将它添加到某个 Controller 中,因为我的应用程序由一大堆模块组成,我想在我的所有模块中访问该信息。

我已经尝试将它注入(inject)到 global.php 中,但无济于事,因为我无法在那个阶段使用我的数据库适配器或任何其他重要的类。

关于最佳实践的任何想法或链接?

最佳答案

导航容器由工厂类组成。最简单的方法是编写自己的工厂并让 getPages() 方法从数据库而不是从配置中获取页面。如果您从 AbstractNavigationFactory 扩展,您只需要编写几个方法。

<?php
namespace Application\Navigation\Service;

use Zend\Navigation\Service\AbstractNavigationFactory;
use Zend\ServiceManager\ServiceLocatorInterface;

class CmsNavigationFactory extends AbstractNavigationFactory
{
/**
* @param ServiceLocatorInterface $serviceLocator
* @return array
* @throws \Zend\Navigation\Exception\InvalidArgumentException
*/
protected function getPages(ServiceLocatorInterface $serviceLocator)
{
if (null === $this->pages) {

$application = $serviceLocator->get('Application');
$routeMatch = $application->getMvcEvent()->getRouteMatch();
$router = $application->getMvcEvent()->getRouter();

// get your pages from wherever...
$pages = $this->getPagesFromDB();

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

public function getName()
{
// this isn't used if fetching from db, it's just here to keep the abstract factory happy
return 'cms';
}
}

将工厂添加到服务管理器中,就像对其他容器所做的那样

'service_manager' => array(
'factories' => array(
'CmsNavigation' => 'Application\Navigation\Service\CmsNavigationFactory',
),
),

并以相同的方式将它与导航 View 助手一起使用

<?php echo $this->navigation()->menu('CmsNavigation'); ?>

关于zend-framework2 - ZF2 - 在调用 Controller 之前将页面注入(inject)导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16622179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com