【问题标题】:Call to a member function send() on a non-object在非对象上调用成员函数 send()
【发布时间】:2015-01-12 07:28:13
【问题描述】:

我的 cakePHP 版本 2.2.3

我在向某人发送电子邮件时收到错误消息。

代码:

                $to = 'xxxxxxxx@xxxxxx.xx';
                $from='noreply@xxxx.xx';
                $sendMessage ='hello world!';
                $Email = new CakeEmail();
                $Email->template('default')
                    ->emailFormat('html')
                    ->to($to)
                    ->from($from)                   
                    ->subject('My Subject')
                    ->send($sendMessage);

错误信息-

致命错误:在 /home/chatfun/app/Model/User.php 中的非对象上调用成员函数 send() >78

我的代码哪里出了问题?

【问题讨论】:

  • subject() 没有返回对象。检查返回类型。
  • 您能用您自己的话来说一下错误消息的内容吗?我只是想知道为什么人们无法理解它。

标签: php cakephp


【解决方案1】:

我建议自己调用 setter 方法。主要是因为如果你打算为此编写一个测试用例,它会让你的生活变得更轻松;

型号

// /Model/User.php

function sendEmail() {
    if (!$this->Email) {
        $this->Email = new CakeEmail();
    }
    $this->Email->to('xxxxxxxx@xxxxxx.xx');
    $this->Email->from('noreply@xxxx.xx');
    $this->Email->emailFormat('html');
    $this->Email->template('default');
    $this->Email->subject('My Subject');
    $this->Email->send();
}

测试

// /Test/Case/Model/UserTest.php

function testSendEmail() {

    $this->User->Email = $this->getMock('CakeEmail');

    $this->User->Email->expects($this->once())
        ->method('to')
        ->with($this->equalTo('xxxxxxxx@xxxxxx.xx'));

    $this->User->Email->expects($this->once())
        ->method('subject')
        ->with($this->equalTo('My subject'));

    $this->User->Email->expects($this->once())
        ->method('send');

    $this->User->sendEmail();
}

【讨论】:

    【解决方案2】:

    摘自原文:

     556:     public function subject($subject = null) {
     557:         if ($subject === null) {
     558:             return $this->_subject;
     559:         }
     560:         $this->_subject = $this->_encode((string)$subject);
     561:         return $this;
     562:     }
    

    正如您所见,当您提供nullas 主题时,它将返回主题而不是实例。 因此,请确保您的 $getSetting['Setting']['subject'] 不为空。此刻是什么情况

    source

    【讨论】:

    • 根据列出的代码,他们为函数提供了一个主题,这将否定这是原因,因为检查本地函数 $subject 是为了返回它而不是实例.
    • OP 更新问题。原始问题说明将 var 传递给主题
    • @Jon 这个问题被编辑了几次,也许它在原始版本中使用了一个变量?编辑:DarkBee 让我接受 :)
    • 这个答案是正确的。似乎问题中的上述示例不是实际代码的样子:)
    • 哈哈,我检查了版本历史,它们都显示主题具有价值,但我猜前 5 分钟没有显示编辑让我失望了。大声笑
    猜你喜欢
    • 2016-09-20
    • 1970-01-01
    • 2010-09-26
    • 2012-04-20
    • 2015-05-01
    • 2014-08-07
    • 2013-12-01
    • 2015-12-23
    • 2015-08-29
    相关资源
    最近更新 更多