首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZF2控制台:在Zend\导航\页面中找不到名为"xy“的路由

ZF2控制台:在Zend\导航\页面中找不到名为"xy“的路由
EN

Stack Overflow用户
提问于 2017-01-24 16:01:43
回答 1查看 384关注 0票数 0

我编写了一个模块来生成sitemap xml文件。我想通过cronjob在控制台路由中生成它们,但问题是我在遍历导航容器时得到一个异常Route with name "xy" not found。这条路线肯定存在。如果我在web请求中调用它,一切都会正常工作。堆栈跟踪如下所示:

代码语言:javascript
复制
======================================================================
 The application has thrown an exception!
======================================================================
 Zend\Mvc\Router\Exception\RuntimeException
 Route with name "home" not found
----------------------------------------------------------------------
vendor/zendframework/zend-mvc/src/Router/SimpleRouteStack.php:328
#0 vendor/zendframework/zend-navigation/src/Page/Mvc.php(260): Zend\Mvc\Router\SimpleRouteStack->assemble(Array, Array)
#1 vendor/zendframework/zend-navigation/src/Page/AbstractPage.php(999): Zend\Navigation\Page\Mvc->getHref()
#2 vendor/zendframework/zend-navigation/src/Page/AbstractPage.php(1035): Zend\Navigation\Page\AbstractPage->get('href')
#3 module/Sitemap/src/Sitemap/Service/GeneratorService.php(83): Zend\Navigation\Page\AbstractPage->__get('href')
#4 module/Sitemap/src/Sitemap/Controller/Cli/GeneratorController.php(31): Sitemap\Service\GeneratorService->generateSitemaps()
#5 vendor/zendframework/zend-mvc/src/Controller/AbstractActionController.php(82): Sitemap\Controller\Cli\GeneratorController->indexAction()
#6 [internal function]: Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(Zend\Mvc\MvcEvent))
#7 vendor/zendframework/zend-eventmanager/src/EventManager.php(490): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
#8 vendor/zendframework/zend-eventmanager/src/EventManager.php(214): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#9 vendor/zendframework/zend-mvc/src/Controller/AbstractController.php(118): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#10 vendor/zendframework/zend-mvc/src/DispatchListener.php(93): Zend\Mvc\Controller\AbstractController->dispatch(Object(Zend\Console\Request), Object(Zend\Console\Response))
#11 [internal function]: Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent))
#12 vendor/zendframework/zend-eventmanager/src/EventManager.php(490): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
#13 vendor/zendframework/zend-eventmanager/src/EventManager.php(214): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#14 vendor/zendframework/zend-mvc/src/Application.php(314): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#15 public/index.php(15): Zend\Mvc\Application->run()
#16 {main}
======================================================================
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-24 19:09:47

您正在使用CLI来处理或生成您的sitemap XML,从而使用另一个路由器,即CLI路由器。

因此,您需要获取另一个路由器类-> HTTP Router。

代码语言:javascript
复制
array(
    // HttpRouter
    'router' => array(
        'routes' => array(
            // HTTP routes are here
        )
    ),
    // Console Router 
    'console' => array(
        'router' => array(
            'routes' => array(
                // Console routes go here
            )
        )
    ),
)

因此,为了获得HttpRouter:

代码语言:javascript
复制
$serviceManager->get('HttpRouter')

因此,如果您要使用HttpRouter,可以在您的CLI控制器中执行以下操作:

代码语言:javascript
复制
$cliRouter = $this->getEvent()->getRouter();
$this->getEvent()->setRouter($httpRouter);
// Http Routers can be called with the plugins
$this->url()->fromRoute('home');
// Use CLI router again
$this->getEvent()->setRouter($cliRouter);

调用CLI this将在使用$this->url()->fromRoute('home');路由器时抛出问题中的错误。"home“未在您的控制台路由中定义,因此找不到。将路由器更改为您在Http路由中定义的HTTP。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41822906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档