我正在尝试构建一些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,但该怎么办?