不在对象上下文中时使用$ this-ZendFramework

时间:2018-07-20 06:07:28

标签: php zend-framework2

这真让我发疯。

下载并安装了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

}
?>

1 个答案:

答案 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。