Nic*_*ick 8 php zend-framework2
我有一个控制台控制器和一个发送电子邮件的动作(在下面的module.config.php中定义)
'console' => array(
'router' => array(
'routes' => array(
'cronroute' => array(
'options' => array(
'route' => 'sendEmails',
'defaults' => array(
'controller' => 'Application\Controller\Console',
'action' => 'send-emails'
)
)
),
)
)
),
Run Code Online (Sandbox Code Playgroud)
在操作中,我想发送一封电子邮件,其中包含指向该网站上其他操作的链接.这通常使用URL View Helper来完成,但由于Request类型是Console而不是HTTP,因此不起作用.我试图创建一个HTTP请求,但我不知道如何给它站点域或Controller/Action链接.
我的控制器代码:
$vhm = $this->getServiceLocator()->get('viewhelpermanager');
$url = $vhm->get('url');
$urlString = $url('communication', array('action' => 'respond', 'id' => $id,
array('force_canonical' => true));
Run Code Online (Sandbox Code Playgroud)
这会引发错误:
======================================================================
The application has thrown an exception!
======================================================================
Zend\Mvc\Router\Exception\RuntimeException
Request URI has not been set
Run Code Online (Sandbox Code Playgroud)
如何在具有站点方案,域和路径/到/ action的控制台控制器中创建HTTP请求?我如何将其传递给URL View Helper?
更新: 这篇文章的正确答案可以在这里找到: Stackoverflow:在 ZF2 控制台应用程序中使用 HTTP 路由
好吧,你已经非常接近这个了,但你没有使用这个Url插件。如果您进一步深入了解控制器插件的 ZF2 文档,您可能已经找到了解决方案。
请参阅参考:ZF2 文档 - 控制器插件
您ConsoleController必须实现以下其中一项才能检索控制器插件:
AbstractActionControllerAbstractRestfulControllersetPluginManagerAbstractActionController如果您还没有这样做,我建议您使用 来扩展您的控制器。
如果您确实使用,AbstractActionController您可以简单地调用$urlPlugin = $this->url(),因为它AbstractActionController有一个__call()为您检索插件的实现。但您也可以使用:$urlPlugin = $this->plugin('url');
因此,为了生成邮件的 URL,您可以在控制器中执行以下操作:
$urlPlugin = $this->url();
$urlString = $urlPlugin->fromRoute(
'route/myroute',
array(
'param1' => $param1,
'param2' => $param2
),
array(
'option1' => $option1,
'option2' => $option2
)
);
Run Code Online (Sandbox Code Playgroud)
您现在可以将此 URL 传递给您的视图viewModel或在 viewModel 中使用 URL viewHelper,但这取决于您。
尽量避免在控制器中使用 viewHelpers,因为我们有适用于这种情况的插件。
如果您想知道AbstractActionController有哪些方法,请参阅ZF2 ApiDoc - AbstractActionController
为了使这项工作有效,您必须使用正确的结构设置路由配置:
// This can sit inside of modules/Application/config/module.config.php or any other module's config.
array(
'router' => array(
'routes' => array(
// HTTP routes are here
)
),
'console' => array(
'router' => array(
'routes' => array(
// Console routes go here
)
)
),
)
Run Code Online (Sandbox Code Playgroud)
如果您有控制台模块,请坚持使用控制台路由路径。不要忘记控制台键及其下方的所有路线!查看文档以供参考:ZF2 - 文档:控制台路由和路由
| 归档时间: |
|
| 查看次数: |
2508 次 |
| 最近记录: |