【问题标题】:CakePHP - Call to a member function search() on a non-objectCakePHP - 在非对象上调用成员函数 search()
【发布时间】:2013-08-18 09:54:30
【问题描述】:

我在我的 cakephp 安装中创建了一个 NamesController.php,并创建了一个搜索功能:

public function search($api_key = null,$domain = null,$keywords = null,$country = null,$type = null) {
        $result = $this->Mails->search($keywords,$country,$type);
        return $result;
}

但这会给我一个错误:

 Call to a member function search() on a non-object 

ps:MailsController.php还包含搜索功能,效果很好。

为什么这让我发现了这个错误?我到底做错了什么?

提前谢谢你!

【问题讨论】:

  • 您是否验证了Mails 存在并且是一个对象? var_dump($this);并确保有一个Mails 成员。

标签: php cakephp controller cakephp-2.0


【解决方案1】:

如果你在做$this->Mails->search,那么搜索功能应该在你的邮件模型而不是控制器中。如果您想从Names 控制器访问Mails 控制器的功能,请执行以下操作:

//names controller
App::import('Controller', 'Mails');
class NamesController extends AppController {
....
public function search($api_key = null,$domain = null,$keywords = null,$country = null,$type = null) {
    $mails = new MailsController();
    $result = $mails->search($keywords,$country,$type);
    return $result;
}

【讨论】:

  • -1 new MailsController() ?调用另一个控制器通常表明架构不好(控制器中的方法应该在模型中)。也就是说,这样做的正确方法是使用requestAction,而不是直接创建一个新的控制器实例
【解决方案2】:

你的结果是正确的,因为你没有声明这个变量。

【讨论】:

  • 请提供正确答案
猜你喜欢
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多