ZF2控制台路由提供的请求URI尚未设置(缺少route_match)?

时间:2014-08-05 14:54:07

标签: php routing console zend-framework2 url-routing

我正在尝试构建一些Cronjobs处理。

我从CLI运行我的命令(temp)进行测试:

php public/index.php send-private-messages-reminders direct

因此我在module.config.php中创建了一个带有此路由的模块

// cron route
'console' => array(
    'router' => array(
        'routes' => array(
            'cronjobs' => array(
                'type' => 'simple',
                'options' => array(
                    'route' => 'send-private-messages-reminders <freq>',
                    'defaults' => array(
                        'controller' => 'Cron\Controller\SendPrivateMessagesReminders',
                        'action' => 'task'
                    ),
                )
            ),
        ),
    ),
),

然后我在控制器中获取用户和这些用户的消息。我创建了我的viewModel并准备了我的邮件:

$mailer = $this->getServiceLocator()->get('\SxMail\Service\SxMail');
$sxMail = $mailer->prepare();
$viewModel = new ViewModel();

对于布局,我想使用我在我的应用程序中使用的布局。所以我在module.config.php中定义我的布局

'view_manager' => array(
    'template_map' => array(
        'cron/mail/layout' => __DIR__ . '/../view/layout/mail.twig',
    ),
    'template_path_stack' => array(
        __DIR__ . '/../view',
    ),
),

并设置我的布局:

$sxMail->setLayout('cron/mail/layout');

此外,还有更多代码用于模板:

$viewModel->setTemplate('mailtemplates/private-messages-reminders.twig');

并为该模板设置变量:

 $viewModel->setVariables(array( .... ));

到目前为止一切顺利。它几乎按预期工作。只有...

在我的mail.twig模板中,我使用ViewHelper作为网址,例如:

<img src="{{ url('mysite', {}, {force_canonical: true}) }}"images/merk-logo.png" />

在我的应用程序中,ViewHelper的一切都很好,但在我的cron中却没有。我收到这个错误:

An exception has been thrown during the rendering of a template 
("Request URI has not been set") in "application/mail/layout" at line ...

从这里开始我不知所措。我可以问一下routeMatch:

$routeMatch = $this->getServiceLocator()->get('Application')->getMvcEvent()->getRouteMatch();

这给了我:

object(Zend\Mvc\Router\Console\RouteMatch)#517 (3) {
  ["length":protected]=>
  int(0)
  ["params":protected]=>
  array(3) {
     ["controller"]=>
    string(44) "Cron\Controller\SendPrivateMessagesReminders"
    ["action"]=>
    string(4) "task"
    ["freq"]=>
    string(6) "direct"
  }
  ["matchedRouteName":protected]=>
  string(8) "cronjobs"
}

但这就是我能找到的。我不知道该怎么做或如何解决问题。我一直在寻找,但&#34;解决方案&#34;到目前为止对我来说还不够详细。

缺少route_match,但该怎么办?

0 个答案:

没有答案