前提・実現したいこと
ここに質問の内容を詳しく書いてください。
PHP(CakePHP)でマスタ画面を作っています。
マスタの新規登録時にに以下のエラーメッセージが発生しました。
前提として、MtShiftPatternとMtShiftPatternsの二つがあり、モデル名やテーブル名などで使い分けないといけないと決まっているみたいです。
初心者のためわかる範囲での質問であることをお許しください。
発生している問題・エラーメッセージ
Fatal Error Error: Call to a member function save() on null File: C:\xampp\htdocs\car-maintenance\app\Controller\MtShiftPatternsController.php Line: 59 Notice: If you want to customize this error message, create app\View\Errors\fatal_error.ctp
該当のソースコード
cakephp
1<?php 2App::uses('AppController', 'Controller'); 3 4class MtShiftPatternsController extends AppController { 5 6 public function index() { 7 8 } 9 10 11 public function search() { 12 13 $this->autoRender = false; 14 $this->response->type('json'); 15 16 if ($this->request->is('get')) { 17 18 $shift = $this->shift_patterns(); 19 20 return json_encode(['success' => 'success', 'data' => $shift ]); 21 } 22 23 24 $this->response->statusCode(403); 25 return json_encode(['error' => ['message' => '仕様で定義されていないMETHODです。']]); 26 } 27 28 public function detail($id = 0) { 29 $this->autoRender = false; 30 $this->response->type('json'); 31 32 // $idの確認 33 if (! ctype_digit($id) && $id !== 0) { 34 $this->response->statusCode(403); 35 return json_encode(['error' => ['message' => 'ID以外の値が渡されました。'. $id]]); 36 } 37 38 39 if ($this->request->is('get')) { 40 41 $shift = $this->MtShiftPattern->find('first', ['conditions' => ['id' => $id]]); 42 43 if (empty($shift)) { 44 $this->response->statusCode(404); 45 return json_encode(['error' => ['message' => '未登録のIDが指定されました。'. $id]]); 46 } else { 47 return json_encode(['success' => 'success', 'data' => $shift]); 48 } 49 } elseif ($this->request->is('post')) { 50 51 if ($id > 0) { 52 $this->request->data['MtShiftPattern']['id'] = $id; 53 $this->MtShiftPattern->id = $id; 54 $data['id'] = $id; 55 } else { 56 $this->MtShiftPattern->create(); 57 } 58 59 if ($this->MtShiftPatterns->save($this->data)) { 60 if ($id <= 0) { 61 $id = $this->MtShiftPattern->id; 62 } 63 64 return json_encode(['success' => 'success', 'data' => $this->request->data]); 65 } else { 66 $this->response->statusCode(500); 67 return json_encode(['error' => ['message' => '保存に失敗しました。']]); 68 } 69 } elseif ($this->request->is('delete')) { 70 // 削除 71 72 if ($id > 0) { 73 /* if ($this->User->find('count', ['conditions' => ['MtOffice_id' => $id]]) > 0) { 74 * $this->response->statusCode(403); 75 * return json_encode(['error' => ['message' => '使用中の権限です。未使用にしてから削除してください。']]); 76 * } */ 77 78 $this->MtShiftPattern->id = $id; 79 if ($this->MtShiftPattern->delete($id, true)) { 80 return json_encode(['success' => 'success', 'data' => []]); 81 } else { 82 $this->response->statusCode(500); 83 return json_encode(['error' => ['message' => '削除に失敗しました。']]); 84 } 85 86 } else { 87 $this->response->statusCode(403); 88 return json_encode(['error' => ['message' => 'IDを送信してください。']]); 89 } 90 } 91 92 $this->response->statusCode(403); 93 return json_encode(['error' => ['message' => '仕様で定義されていないMETHODです。']]); 94 } 95 96 97 private function shift_patterns() { 98 return $this->MtShiftPattern->find('all', ['order' => 'order_no']); 99 } 100} 101
試したこと
定義されていない変数名を使おうとしているからエラーが出ていると思ったのですが、どの変数がそれにあたるのかがわかりませんでした。
補足情報(FW/ツールのバージョンなど)
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/15 04:34
2019/11/15 04:58
2019/11/15 06:37
2019/11/15 06:38
2019/11/15 06:44
2019/11/15 06:47
2019/11/15 06:57
2019/11/15 07:08
2019/11/15 07:12