这真让我发疯。
下载并安装了ZendFramework。尝试发送DKIM签名的邮件,但这给了我这个错误(我直接从他们的文档中复制了该错误)。
错误:致命错误:未捕获错误:在不在C:\ xampp \ htdocs \ Project \ send_form_email.php中的对象上下文中时使用$ this:12堆栈跟踪:#0 {main}抛出在C:\ xampp \ htdocs第12行的\ Project \ send_form_email.php
// sign message with dkim
$signer = $this->getServiceLocator()->get('DkimSigner');
$signer->signMessage($mail);
我在这里做什么错了?
编辑:添加了所有编码
<?php
require 'vendor/autoload.php';
$mail = new \Zend\Mail\Message();
$mail->setBody("Test world!");
$mail->setFrom('noreplytest@sanscalc.co.za');
$mail->addTo('jr.swart49995@gmail.com');
$mail->setSubject('le subject');
// sign message with dkim
$signer = $this->getServiceLocator()->get('DkimSigner');
$signer->signMessage($mail);
// send message
$transport = new \Zend\Mail\Transport\Sendmail();
$transport->send($mail);
?>
Thank you for contacting us. We will be in touch with you very soon.
<?php
}
?>
答案 0 :(得分:4)
$ this仅在从对象内部调用时才有效。您的代码不在对象内,这就是为什么调用$ this会引发错误的原因。
$this->getServiceLocator()->get('DkimSigner');
您的代码希望调用在对象内定义的getServiceLocator()方法,由于代码本质上是过程性的,因此您尚未完成此操作。
我猜您正在尝试从此处使用示例代码:https://github.com/joepsyko/zf-dkim
如果您检查该页面,它将告诉您代码应该在控制器(对象)中,$ this在有效上下文中,并且在其中定义getServiceLocator方法。
尝试并安装标准的“入门” zend框架,并尝试在控制器(https://docs.zendframework.com/tutorials/getting-started/skeleton-application/)内的代码段
或者取消在代码中使用服务定位器,并在脚本中手动实例化DKimm Signer。