DBに新しい本を追加する際に、新しいエンティティで要求をパッチし、そのエンティティを保存するためのアクションを別にします。要求を新しいエンティティにパッチするアクションは、このエンティティを別のメソッドに返します。CakePHP 3.2の同じコントローラ内の別のアクションにパラメータとしてエンティティを渡すことができません。
コードは次のようである:試験記録を保存中
public function bookAdder($book = [])
{
if ($this->Books->save($book)) {
$this->Flash->success(__('The book has been saved.'));
return $this->redirect(['action' => 'index']);
} else {
$this->Flash->error(__('The book could not be saved. Please, try again.'));
return $this->redirect(['action' => 'add']);
}
}
public function add()
{
$user_id = $this->request->session()->read('Auth.User.id');
$book = $this->Books->newEntity();
if ($this->request->is('post')) {
$book = $this->Books->patchEntity($book, $this->request->data);
$book->set(array('user_id' => "$user_id"));
return $this->redirect(['action' => 'bookAdder', $book]);
}
$users = $this->Books->Users->find('list', ['limit' => 200]);
$this->set(compact('book', 'users'));
$this->set('_serialize', ['book']);
}
、私はこのエラーを取得しています:
Error: A route matching "/books/book-adder/{ "title": "cc", "writer": "cc", "edition": "cc", "course": "cc", "description": "cc", "price": 2, "user_id": "1"}" could not be found.
私もpublic function bookAdder($book){ }
を試していないが、まだ成功。
この問題を解決する方法はありますか?前もって感謝します!
答えをありがとう:)しかし、それは可能ですか?私は何とかadd()関数で作られたエンティティの参照を取得し、それをbookAdder()関数に渡すことができたらと思います。 –
これはできません。実際には意味がないので、実際には意味がありません。パラメータをそのまま渡してはいけません。常にエラーを生成します。本当に必要なら、エンティティを1つ関数を呼び出すことによって別の関数から取得します。ただし、パラメータとしてエンティティを渡すことはありません! –
本当に別の関数からEntityを取得したい場合は、更新された答えを見てください! –