前提・実現したいこと
CakePHPのCMSチュートリアルを学習しています。
データベースを更新する前にエンティティのデータを加工したいと思っています。
そのため、beforeSaveコールバックを発生させたい。
発生している問題
beforeSaveコールバックが呼ばれない。
該当のソースコード#1(ArticlesTable.php)
PHP
1 public function beforeSave($event, $entity, $options) 2 { 3 $this->log('aaaaaaaaaaaaaaaaaaaa'); 4 if ($entity->tag_string) 5 { 6 $entity->tags = $this->_buildTags($entity->tag_string); 7 } 8 }
呼び元のソースコード#2(ArticlesController.php)
PHP
1 public function edit($id = null) 2 { 3 $article = $this->Articles->get($id, [ 4 'contain' => ['Tags'], 5 ]); 6 if ($this->request->is(['patch', 'post', 'put'])) { 7 $article = $this->Articles->patchEntity($article, $this->request->getData()); 8 if ($this->Articles->save($article)) { 9 $this->Flash->success(__('The article has been saved.')); 10 11 return $this->redirect(['action' => 'index']); 12 } 13 $this->Flash->error(__('The article could not be saved. Please, try again.')); 14 } 15 $users = $this->Articles->Users->find('list', ['limit' => 200]); 16 $tags = $this->Articles->Tags->find('list', ['limit' => 200]); 17 $this->set(compact('article', 'users', 'tags')); 18 }
試したこと#1
ログを出力するように、beforeSaveメソッド内にログを埋め込みました。
(該当のソースコード#1)
しかし、ログファイルにログが出力されていませんでした。
試したこと#2
$this->Articles をdebug関数にてログに出力しました。
ArticlesController.php
PHP
1 $this->log(debug($this->Articles)); 2 if ($this->Articles->save($article)) {
ログ
2020-02-14 11:46:32 Error: App\Model\Table\ArticlesTable Object ( [registryAlias] => Articles [table] => articles [alias] => Articles [entityClass] => App\Model\Entity\Article [associations] => Array ( [0] => users [1] => tags [2] => articlestags ) [behaviors] => Array ( [0] => Timestamp ) [defaultConnection] => default [connectionName] => default )
補足情報
【バージョン情報】
PHPのバージョン 5.6.40
CakePHPのバージョン 3.8.9
【現在学習しているサイトとURL】
CMS チュートリアル - タグとユーザー
https://book.cakephp.org/3/ja/tutorials-and-examples/cms/tags-and-users.html#id9
回答3件
あなたの回答
tips
プレビュー