【问题标题】:Posting to a controller with ajax in CakePHP 2.0在 CakePHP 2.0 中使用 ajax 发布到控制器
【发布时间】:2012-02-29 12:03:58
【问题描述】:

当我发布到这个控制器时,我得到了回复:Fatal error: Call to a member function find() on a non-object in /app/Controller/AppController.php on line 26,这可能与明确使用$this->data() 有关。我正在使用CakePHP save without form 根据那里的建议,但由于我没有使用表单来发送数据(因此不使用$this->request->data()),我想知道$this->data() 的替代品是什么,所以我可以让它工作。

我的数据库表是submissions_favorites

这是我最喜欢的模型:

class SubmissionFavorite extends AppModel {

    var $name = 'SubmissionFavorite';

    var $belongsTo = array(
        'User' => array(
            'className' => 'User'
        )
    );

}

这是 AjaxController(我要发布的内容):

class AjaxController extends AppController {

    var $layout = 'ajax';  // uses an empty layout
    var $autoRender = false; // renders nothing by default
    var $uses = 'SubmissionFavorite';

    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->loginRedirect = array('controller' => 'home', 'action' => 'index');
        $this->Auth->allow('addFavorite');
        $this->Auth->flashElement = 'flash_error';
    }

public function addFavorite() {
    $this->autoRender = false;

    $this->data['SubmissionFavorite']['user_id'] = $this->Session->read('Auth.User.id');
    $this->data['SubmissionFavorite']['submission_id'] = $_POST['id'];
    $this->data['SubmissionFavorite']['when'] = DboSource::expression('NOW()');

    $message = array('success' => 'success');

    $toReturn = json_encode($message);

    if ($this->RequestHandler->isAjax()) {
        if ($this->Session->read('Auth.User')) {
            $this->SubmissionFavorite->save($this->data);
            return $toReturn;
        } else {
            $login = array('login' => 'Please log in to add favorites');
            return json_encode($login);
        }
    }
}

我的 AppController 中的第 26 行是:

protected function getSubmissionCount() {
    $totalSubmissions = $this->Submission->find('count');
    return $totalSubmissions;
}

这与其他任何事情完全无关。当我在我的 AjaxController 中编写新方法时,我什至没有向 AppController 添加任何内容,所以我不确定它是如何相关的(或者为什么我什至在该文件中收到错误)。

【问题讨论】:

  • 这是您的 AppController 中的第 26 行...?

标签: php ajax cakephp cakephp-2.0


【解决方案1】:

首先,按照蛋糕惯例,您应该将模型命名为 SubmissionsFavorite(注意 Submission 和 Favorite 之间的 s)。这是因为您的表名是由 2 个单词组成的,甚至代表了另外 2 个表之间的关系。

另外,你不能在 AppController 上执行 $this->Submission->... 而不告诉 cake 什么是“提交”。看看这个链接,看看如何初始化提交模型并在 AppController 上使用它:Can I use one model inside of a different model in CakePHP?

问候。

【讨论】:

    【解决方案2】:

    尝试全部改变

    var $name = 'SubmissionFavorite';
    

    到:

    public $name = 'SubmissionFavorite';
    

    同时更改:var $uses = 'SubmissionFavorite';

    收件人:public $uses = array ('SubmissionFavorite');

    【讨论】:

    • 嗯,有人建议我也做第一件事public $name = 'SubmissionFavorite',但这没有用。现在我遇到了其他错误。这是一个正常的 CakePHP 约定吗?在文档中似乎找不到任何关于在没有表单的情况下保存到模型的内容。
    猜你喜欢
    • 2013-05-14
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多