はじめに
今回、CakePHP4で色々やっている中で、save()メソッドでtrueが返ってくるのに何故か実際にデータは
保存できていないという事象に至りました。
あくまで私の環境下での原因ですが、備忘録として記録いたします。
なお、コードはサンプルなので例外処理等不要な記述は省いています。
前提(今回のコード)
form内に複数ボタンを設置しなければいけない事象があったため、にvalueを持たせ、条件分岐をしていました。
サンプルとして、以下の感じになります。
index.php
<?= $this->Form->create($entity, ['url' => ['controller' => 'Sample', 'action' => 'index']]) ?>
// フォームの内容
<?= $this->Form->button('',['type' => 'submit', 'name' => 'buttonType', 'value' => 'create']) ?>
<?= $this->Form->button('',['type' => 'submit', 'name' => 'buttonType', 'value' => 'delete']) ?>
<?= $this->Form->end() ?>
SampleController.php
public function index()
{
/** 初期表示メソッド **/
if($this->request->is(['post', 'put'])){
$request = $this->request->getData();
$buttonType = $request['buttonType'];
// buttonの名称によってメソッドの切り替え
switch($buttonType){
case 'create':
return $this->create($request);
case 'delete':
return $this->delete($request);
default:
return $this->redirect([
'controller' => 'Error',
'action' => 'index'
]);
}
}
}
public function create($request)
{
$entity = $this->Model->newEntity($request);
if($entity->hasData()){
return $this->redirect($this->referer);
}
if($this->Model->save($entity)){
dd('保存成功');
}else{
dd('保存失敗');
}
}
public function delete($request)
{
// 削除
$this->Model->delete($request['id']);
}
事象
冒頭やタイトルでも記述しましたが、何故か「保存成功」と出るのに、DBを見てもデータはない・・・
という状態でした。
解決法
今回の事象については、以下の対処で解消することができました。
Before
index.php
return $this->create($request);
After
index.php
$this->create($request);
break; // switch文の中のため
はい、たったこの1行でした。
保存するメソッドをreturn
で呼び出ししていたのがダメだった理由でした。
本質的な原因が突き止められていないので、「なんか動いた」という恐怖な状態です・・・。
原因がわかる方がいらっしゃればご教授願います。
後日私自身で原因が突き止められたら記事に追記させていただきます。