Отправка на контроллер с ajax в CakePHP 2.0 - PullRequest
1 голос
/ 29 февраля 2012

Когда я отправляю сообщение на этот контроллер, я получаю это в ответ: Fatal error: Call to a member function find() on a non-object in /app/Controller/AppController.php on line 26, что, вероятно, связано с явным использованием $this->data().Я использовал CakePHP save без формы за рекомендацию, но так как я не использую форму для отправки данных (таким образом, не использую $this->request->data()), я хотел бы знать, что заменадля $this->data(), поэтому я могу заставить это работать.

Моя таблица базы данных: 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;
}

, которая совершенно не связана ни с чем другим.Я даже ничего не добавил в AppController, когда писал новый метод в своем AjaxController, поэтому я не уверен, насколько он актуален (или почему я даже получаю сообщение об ошибке в этом файле).

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Во-первых, следуя правилам тортов, вы должны назвать свою модель SubmissionsFavorite (обратите внимание на s между Submission и Favorite).Это потому, что имя вашей таблицы состоит из 2 слов, даже представляющих связь между двумя другими таблицами.

Кроме того, вы не можете сделать $ this-> Submission -> ... на AppController, не сказав торт независимоэто "Представление".Взгляните на эту ссылку, чтобы узнать, как инициализировать модель представления и использовать ее в AppController: Можно ли использовать одну модель внутри другой модели в CakePHP?

С уважением.

1 голос
/ 29 февраля 2012

Попробуйте изменить все

var $name = 'SubmissionFavorite';

на:

public $name = 'SubmissionFavorite';

Также измените: var $uses = 'SubmissionFavorite';

на: public $uses = array ('SubmissionFavorite');

...