2017-01-24 1 views
0

사이트 맵 XML 파일을 생성하는 모듈을 작성했습니다. 내가 cronjob을 통해 콘솔 경로에서 그들을 생성하고 싶지만 문제는 탐색 컨테이너를 통해 반복 할 때 Route with name "xy" not found 예외가 발생한다는 것입니다. 경로가 확실히 존재합니다. 웹 요청에서이 코드를 호출하면 모든 것이 정상적으로 작동합니다. 스택 추적은 다음과 같습니다 : 당신은 당신의 사이트 맵 XML을 처리하거나 생성하기 위해 CLI를 사용하여 다른 라우터의 CLI를 사용하고ZF2 Console : 이름이 "xy"인 경로가 Zend Navigation Page에 없습니다.

====================================================================== 
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} 
====================================================================== 

답변

1

.

그래서 다른 라우터 클래스 -> HTTP 라우터를 가져와야합니다.

array(
    // HttpRouter 
    'router' => array(
     'routes' => array(
      // HTTP routes are here 
     ) 
    ), 
    // Console Router 
    'console' => array(
     'router' => array(
      'routes' => array(
       // Console routes go here 
      ) 
     ) 
    ), 
) 

그래서 HttpRouter 얻기 위하여 :

$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 컨트롤러 내에서 다음을 수행 할 수있는 HttpRouter (들)을 사용하려면

$serviceManager->get('HttpRouter') 

$this->url()->fromRoute('home');을 호출하면 CLI 라우터를 사용할 때 질문에 오류가 발생합니다. "홈"은 콘솔 라우팅에 정의되어 있지 않으므로 찾을 수 없습니다. HTTP 라우팅에서 정의한대로 라우터를 Http로 변경하십시오.

관련 문제