2012-02-29 44 views
1

当我发布到这个控制器时,我回到了这个响应: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()替代是什么,所以我可以得到这个工作。在CakePHP 2.0中发布到带有Ajax的控制器

我的数据库表是submissions_favorites

这是我SubmissionFavorite型号:

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); 
     } 
    } 
} 

线26在我AppController的是:

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

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

+1

这是你的AppController中的行号26 ...? – 2012-02-29 12:15:22

+0

更新了原来的帖子。 – 2012-02-29 22:16:06

回答

1

首先,下面蛋糕约定,您应该为您的模型意见收集(请注意提交和收藏之间的内容)。这是因为你的表名由2个单词组成,甚至表示2个其他表之间的关系。

此外,您无法在AppController上执行$ this-> Submission - > ...而无需告知任何“提交”。看看这个链接,看看如何初始化提交模型,并在AppController上使用它:Can I use one model inside of a different model in CakePHP?

问候。

1

努力改变所有

var $name = 'SubmissionFavorite'; 

到:

public $name = 'SubmissionFavorite'; 

而且改变:var $uses = 'SubmissionFavorite';

到:public $uses = array ('SubmissionFavorite');

+0

嗯,有人建议我做第一件事'public $ name ='SubmissionFavorite''也是,但这没有奏效。现在我收到其他错误。这是一个普通的CakePHP约定吗?似乎无法在文档中找到任何有关将文件保存到没有表单的模型中的任何内容。 – 2012-02-29 22:58:12

相关问题