значения полей редактирования CakePHP - PullRequest
0 голосов
/ 30 марта 2012

Я новичок в cakephp, но, насколько я понимаю, все взаимодействие с базами данных должно происходить в модели.

Я следовал официальному руководству по блогу cakephp, но они используют контроллер для сохранения, редактирования,и удалить сообщения вместо модели.http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/part-two.html

Я пытаюсь разделить программу, чтобы модель заботилась обо всех взаимодействиях с БД.Мне удалось получить его для сохранения новых записей, однако я не могу понять, как их отредактировать.

Вот оригинальное действие, используемое официальным учебником cakephp для редактирования сообщений.

public function edit($id = null) {
$this->Post->id = $id;
if ($this->request->is('get')) {
    $this->request->data = $this->Post->read();
} else {
    if ($this->Post->save($this->request->data)) {
        $this->Session->setFlash('Your post has been updated.');
        $this->redirect(array('action' => 'index'));
    } else {
        $this->Session->setFlash('Unable to update your post.');
    }
}
}

Итак, вот мое действие контроллера.Мой контроллер называется ConcatenatesController, а моя модель - Concatenate.Первоначально я использовал это для проверки сцепления строк.

 public function edit($id = null) {
    $this->Concatenate->id = $id;
    $this->Concatenate->editPost($id);
}               

... и модель, которая идет с ним

 function editPost($id){
    if ($this->save($this->request->data)) {
        $this->Session->setFlash('Your post has been updated.');
        $this->redirect(array('action' => 'index'));
    } else {
        $this->Session->setFlash('Unable to update your post.');
        }
    }

Я получаю следующие ошибки

Notice (8): Trying to get property of non-object [APP/Model/Concatenate.php, line 20] 
Fatal error: Call to a member function setFlash() on a non-object in /Applications/XAMPP/xamppfiles/htdocs/cake/app/Model/Concatenate.php on line 24

Строка 20 относится к

if ($this->save($this->request->data)) {

, а Строка 24 -

  $this->Session->setFlash('Unable to update your post.');

1 Ответ

2 голосов
/ 30 марта 2012

Контроллер не взаимодействует с базой данных directly как таковой, он вызывает модель, чтобы сделать это вместо этого, в чем смысл того, чтобы иметь контроллер в первую очередь.

Системные вещи, такие как Session, Request, FileUpload и т. Д., Считаются логикой приложения и должны находиться в контроллере. Затем контроллер определяет, как приложение должно взаимодействовать с ними, а не с моделью.

Представьте, что для Session в PHP вы используете $_SESSION, тогда у вас есть ApiController для мобильного приложения, которое вы создаете, но не можете полагаться на $_SESSION, так как мобильное приложение обычно не отправляет cookie, модель не должна Не зная или не заботясь о том, как управляется Сеанс, ответственность за поддержание состояния пользователя лежит на Контроллере, и он говорит Моделу, что он должен делать что-то, связанное с Пользователем.

Другой пример: сохранение Post, это not ответственность модели, чтобы знать, какой пользователь в данный момент вошел в систему, контроллер обязан сообщить Model, какой пользователь вошел в систему, в случае торта, передавая fields => array('user_id', $this->Auth->user('id')) при вызове $ this-> User-> Save ().

Документация верна, в которой Контроллер ($this->ModelName->doStuff()) вызывает Модель, чтобы выполнить свою работу, а не "взаимодействовать" напрямую с БД.

Пожалуйста, ознакомьтесь с этими статьями, хотя они и говорят о бизнес-логике и логике приложения, иллюстрация должна помочь вам в этом:)

Логика приложения против Бизнес-логика

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...