2012-02-29 49 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