Обновление формы Cakephp 3

В настоящее время я работаю над проектом с использованием cakephp 3.

У меня есть форма для добавления клиентов, которая работает с этим в моем контроллере:

    public function add(){

        $clients = $this->Clients->newEntity();
        if($this->request->is('post')){
            $clients = $this->Clients->patchEntity($clients, $this->request->data);
            if($this->Clients->save($clients)){
                $this->Flash->success(__('Client has been created.'));
                return $this->redirect(['controller'=>'Clients','action'=>'index']);
            }
            $this->Flash->error(__('Client hasnt been created.'));
        }
        $this->set('clients',$clients);

    }

Затем я хочу иметь возможность изменить один из моих клиентов. У меня есть таблица клиентов, и когда я нажимаю на них, у меня появляется кнопка изменения (jQuery). Затем я нахожусь на своей странице модификации. Я провел некоторый тест с документом из торта, но, похоже, я не понимаю, как он работает и какие инструменты мне следует использовать.

На данный момент у меня есть это на моем контроллере:

public function modify($id = null){
            if(empty($id)){
                throw new NotFoundException;
            }
            $clients = $this->Clients->get($id);
            /* there should be the modify code */
            $this->set('clients', $clients);

        }

Я действительно не знаю, что использовать, как я уже сказал ... Любая помощь, пожалуйста?


person Marien    schedule 10.04.2015    source источник
comment
попробуйте с updateAll, указав идентификатор.   -  person Anant Kumar Singh    schedule 10.04.2015
comment
спасибо за ваш ответ @anantkumarsingh. Я смотрю updateAll() и не понимаю, что я должен поместить в поля $ и $conditions. SQL-запрос, который я хочу, это UPDATE client SET (все поля в форме) WHERE id = $id...   -  person Marien    schedule 10.04.2015
comment
Попробуйте, скажите, работает или нет?   -  person Anant Kumar Singh    schedule 10.04.2015
comment
Я отредактировал свой ответ, думаю, он может работать с updateAll, но документ из торта немного неинформативен.   -  person Marien    schedule 10.04.2015


Ответы (1)


Код для редактирования записи довольно прост:

public function modify($id = null){
        if(empty($id)){
            throw new NotFoundException;
        }
        $client = $this->Clients->get($id);
        if ($this->request->is(['post', 'put']) {
            $client = $this->Clients->patchEntity($client, $this->request->data);
            if ($this->Clients->save($client)) {
                return $this->redirect($someURL);
            }
        }
        $this->set('client', $client);

}
person José Lorenzo Rodríguez    schedule 10.04.2015
comment
спасибо @JoséLorenzo, это работает! updateAll бесполезен в этой ситуации, я думаю! - person Marien; 10.04.2015
comment
Подробнее об исправлении объектов (обновление только полей, которые были изменены) можно найти в документации здесь: book.cakephp.org/3.0/en/orm/ - person Coreus; 10.04.2015