我正在努力弄清楚为什么我不能在CakePHP 2.0的电子邮件模板中使用$ this-> Html-> url.Helpers数组在视图中是空的.这是设计还是我错过了什么?
文档和迁移指南没有提及任何相关内容.
跟踪看起来像:
include - APP/View/Emails/html/admin/users_recover.ctp, line 1
View::_render() - CORE/Cake/View/View.php, line 598
View::render() - CORE/Cake/View/View.php, line 365
CakeEmail::_render() - CORE/Cake/Network/Email/CakeEmail.php, line 1300
CakeEmail::send() - CORE/Cake/Network/Email/CakeEmail.php, line 933
UsersController::_sendRecoverEmail() - APP/Controller/UsersController.php, line 186
UsersController::admin_login() - APP/Controller/UsersController.php, line 101
ReflectionMethod::invokeArgs() - [internal], line ??
Controller::invokeAction() - CORE/Cake/Controller/Controller.php, line 476
Dispatcher::_invoke() - CORE/Cake/Routing/Dispatcher.php, line 106
Dispatcher::dispatch() - CORE/Cake/Routing/Dispatcher.php, line 88
[main] - APP/webroot/index.php, line 96
Run Code Online (Sandbox Code Playgroud)
以下是我发送恢复邮件的功能:
private function _sendRecoverEmail($email, $recoverKey) {
App::uses('CakeEmail', 'Network/Email');
$cakeEmail = new CakeEmail();
$cakeEmail->config('default');
$cakeEmail->to($email);
$cakeEmail->subject('Recover Your '. Configure::read('Site.title') . ' Account');
$cakeEmail->template('admin/users_recover');
$cakeEmail->viewVars(array(
'recoverKey' => $recoverKey,
));
try {
$cakeEmail->send();
} catch (Exception $e) {
trigger_error("ERROR in UsersController::sendRecoverEmail: couldn't send email to: {$email}.");
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
最后,观点:
<p>Have you been having difficulty getting into your <?php echo Configure::read('Site.title'); ?> account?</p>
<?php $url = $this->Html->url(array('action' => 'recover', 'controller' => 'users', $recoveryKey), true); ?>
<p>If this is correct, <a href="<?php echo $url; ?>">click here to recover your access and create a new password.</a></p>
<p>Your password will remain the same if you ignore it.</p>
Run Code Online (Sandbox Code Playgroud)
小智 5
您是否尝试在调用send()之前设置CakeEmail渲染器助手?
$cakeEmail->helpers('Html')
Run Code Online (Sandbox Code Playgroud)
更多信息,请访问http://api20.cakephp.org/file/Cake/Network/Email/CakeEmail.php#method-CakeEmailhelpers
另一个(反DRY)选项可能是在模板中加载HtmlHelper:
<?php
$htmlHelper = $this->Helpers->load('Html');
$url = $htmlHelper->url(array('action' => 'recover', 'controller' => 'users', $recoveryKey), true);
?>
Run Code Online (Sandbox Code Playgroud)