我正在尝试通过控制台shell(最终通过cron作业)从CakePHP 2.1.2发送电子邮件。我发送的视图是一个日历,其中包含指向应用程序网页的链接。我发现的问题是网址没有包含正确的路径,而且我读到的是因为我使用控制台没有请求对象。例如,如果我在浏览器中创建视图,我会得到如下链接:
http://localhost/ReportMonitor/scheduledReports/index/show_date:2012-06-10/result:GOOD
但在使用相同代码的电子邮件中,我得到了这个:
http://localhost/scheduledReports/index/show_date:2012-06-10/result:GOOD
这很近,但没有雪茄。
我一直试图找到我可以设置的全局,只是硬编码app子目录,但还没有找到任何有用的东西。这些链接由以下代码构成:
$newUrl = array();
$newUrl['controller'] = 'scheduledReports';
$newUrl['action'] = 'index';
$newUrl['url'] = array();
foreach ($data as $key => $value) {
$newUrl['show_date'] = "$year-$month-$key";
$newUrl['result'] = 'GOOD';
$data[$key]['num_complete'] = $this->Html->link(__('Complete: ') . $value['num_complete'], Router::reverse($newUrl, true), array('class' => 'green'));
我认为这是一个常见功能(在控制台生成的电子邮件中发送有效网址),但我无法弄明白。
由于
答案 0 :(得分:3)
使用链接
中的full_base
选项
echo $this->Html->link(array(
'controller' => 'posts', 'action' => 'index', 'full_base' => true
));
并将FULL_BASE_URL
中的bootstrap.php
常量设置为您的base-url:
define('FULL_BASE_URL', 'http://www.domain.com/subdir');
如果您正在为您的应用使用路线,则需要在您的shell中包含路由:
App::uses('Router', 'Routing');
config('routes');