質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

2回答

816閲覧

編集ボタンを押しても反応しない

kuuhaku4262

総合スコア39

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2019/11/20 01:36

編集2019/11/20 05:25

前提・実現したいこと

cakephpのバージョン2系で車両管理システムのマスタ画面を作っています。
物理テーブル名はmt_work_reasonsです。
編集ボタンを押して、編集画面を表示させたいです。

発生している問題・エラーメッセージ

データベースに登録したデータを編集したいのですが、編集ボタンを押してもなにも反応が無くえらーも出ませんでした。

該当のソースコード

cakephp

1コントローラ 2<?php 3App::uses('AppController', 'Controller'); 4 5class MtWorkReasonsController extends AppController { 6 7 public function index() { 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 $work = $this->work_reasons(); 19 20 return json_encode(['success' => 'success', 'data' => $work ]); 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 $work = $this->MtWorkReason->find('first', ['conditions' => ['id' => $id]]); 42 43 if (empty($work)) { 44 $this->response->statusCode(404); 45 return json_encode(['error' => ['message' => '未登録のIDが指定されました。'. $id]]); 46 } else { 47 return json_encode(['success' => 'success', 'data' => $work]); 48 } 49 } elseif ($this->request->is('post')) { 50 51 if ($id > 0) { 52 $this->request->data['MtWorkReason']['id'] = $id; 53 $this->MtWorkReason->id = $id; 54 $data['id'] = $id; 55 } else { 56 $this->MtWorkReason->create(); 57 } 58 59 if ($this->MtWorkReason->save($this->data)) { 60 if ($id <= 0) { 61 $id = $this->MtWorkReason->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->MtWorkReason->id = $id; 79 if ($this->MtWorkReason->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 work_reasons() { 98 return $this->MtWorkReason->find('all', ['order' => 'order_no']); 99 } 100}

cakephp

1ビュー 2<?php 3echo $this->Html->css('modal',[ 'inline' => false ]); 4echo $this->Html->css('animate.min.css',[ 'inline' => false ]); 5echo $this->Html->css('dialog',[ 'inline' => false ]); 6echo $this->Html->css('loading-modal',[ 'inline' => false ]); 7echo $this->Html->css('MtWorkReason/index.css',[ 'inline' => false ]); 8 9echo $this->Html->script('webapi.js',[ 'inline' => false ]); 10echo $this->Html->script('modal.js',[ 'inline' => false ]); 11echo $this->Html->script('loading-modal.js',[ 'inline' => false ]); 12echo $this->Html->script('animate.js',[ 'inline' => false ]); 13echo $this->Html->script('dialog.js',[ 'inline' => false ]); 14echo $this->Html->script('view/MtWorkReasons/index.js',[ 'inline' => false ]); 15 16?> 17<h1>事由マスタ</h1> 18 19<a href="#new" data-bind="click: newDetail">新規登録</a> 20<table> 21 <thead> 22 <tr> 23 <th></th> 24 <th>事由番号</th> 25 <th>事由名</th> 26 <th>表示順</th> 27 </tr> 28 </thead> 29 30 <tbody data-bind="foreach: work_reasons"> 31 <tr> 32 <td><a href="#edit" data-bind="click: showDetail">編集</a></td> 33 <td data-bind="text: MtWorkReason.work_reason_number"></td> 34 <td data-bind="text: MtWorkReason.work_reason"></td> 35 <td data-bind="text: MtWorkReason.order_no"></td> 36 <td><a href="#delete" data-bind="click: deleteDetail">削除</a></td> 37 </tr> 38 </tbody> 39</table> 40 41 42 43 44<div class="modal work_reason-edit-modal" style="display:none"> 45 <div class="modal-window"> 46 <div class="modal-header"> 47 <h2 class="modal-title">事由編集</h2> 48 49 <button class="modal-close-button modal-cancel-button">&times</button> 50 </div> 51 <div class="modal-content"> 52 53 <?php echo $this->Form->create('MtWorkReason', ['id' => 'work_reasonEditForm', 54 'action' => 'detail', 55 'submit' => 'return false', 56 'inputDefaults' => ['label' => false, 'div' => false, 'legend' => false] ])?> 57 58 <div class="input "> 59 <label for="" >事由番号</label> 60 61 <input name="data[MtWorkReason][work_reason_number]" data-bind="value: detail.work_reason_number"/> 62 </div> 63 64 <div class="input "> 65 <label for="" >事由名</label> 66 67 <input name="data[MtWorkReason][work_reason]" data-bind="value: detail.work_reason"/> 68 </div> 69 70 <div class=""> 71 <label for="" class="info-item-header">表示順</label> 72 73 <!-- ko if: detail.id() > 0 --> 74 <select name="data[MtWorkReason][order_no]" data-bind="options: orderNumbers, value: detail.orderNo"></select> 75 <!-- /ko --> 76 77 <!-- ko if: detail.id() <= 0 --> 78 <span data-bind="text: newOrderNumber"></span> 79 <input name="data[MtWorkReason][order_no]" type="hidden" data-bind="value: newOrderNumber"/> 80 <!-- /ko --> 81 82 </div> 83 84 <div class="modal-buttons"> 85 <button class="modal-decide-button decision-button" 86 id ="work_reasonSaveButton" 87 type="button" 88 data-bind= "click: saveDetail">保存</button> 89 <button class="modal-cancel-button cancel-button" type="button">キャンセル</button> 90 </div> 91 92 <?php echo $this->Form->end(); ?> 93 </div> 94 </div> 95</div> 96 97<?php echo $this->element('loading-modal'); ?> 98<?php echo $this->element('dialog'); ?> 99

試したこと

打ち間違いだと思い探したのですが、自分では探すことができませんでした。

補足情報(FW/ツールのバージョンなど)

足りない情報などありましたら、コメントにお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/11/20 03:30

ファイルが違うのでしたらコードブロックもわけてください
guest

回答2

0

自己解決

index.jsの39行目が原因でした。
work_reason-edit-modalと入力しなくてはいけないところを、work_reasons-edit-modalと入力してしまっていたため編集ボタンが反応しませんでした。
該当箇所を直したところ、問題なく動きました。

投稿2019/11/21 05:33

kuuhaku4262

総合スコア39

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

type="button"

submitでないとフォーム送信はしませんが、JavaScriptで制御されてたりしますか?

投稿2019/11/20 03:32

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuuhaku4262

2019/11/20 05:21

javascriptで制御しています。
kuuhaku4262

2019/11/20 05:38 編集

index.jsのソースコードです。 文字数オーバーになってしまうので、こちらに書かせていただきます。 $(function() { // knockout.jsの設定 var work_reasonModel = function() { var self = this; self.work_reasons = ko.observableArray([]); self.detail = { id: ko.observable(0), orderNo: ko.observable(1), work_reason_number: ko.observable(2), work_reason: ko.observable(3), }; /*** 表示順のリスト ***/ self.orderNumbers = ko.computed(function() { return Array.from(Array(this.work_reasons().length), (v, k) => k + 1); }, self); /*** 新規登録時の表示順 ***/ self.newOrderNumber = ko.computed(function() { return this.work_reasons().length + 1; }, self); /** イベント設定 **/ function addEvents(work_reason) { /*** 詳細表示 ***/ work_reason.showDetail = function() { console.log('テスト'); self.detail.id(work_reason.MtWorkReason.id); self.detail.orderNo(work_reason.MtWorkReason.order_no); self.detail.work_reason_number(work_reason.MtWorkReason.work_reason_number); self.detail.work_reason(work_reason.MtWorkReason.work_reason); openModal(work_reason, '.work_reasons-edit-modal'); }.bind(work_reason); /*** 削除 ***/ work_reason.deleteDetail = function() { var id = work_reason.MtWorkReason.id; if (id <= 0) { return; } if (! confirm(work_reason.MtWorkReason.work_reason + 'を削除しますか?')) { return; } openLoadingModal(); var url = '/car-maintenance/MtWorkReasons/detail/' + id; webapi.send(url, "DELETE") .done(function( res ) { // 成功 if (res.success) { openDialog('.dialog', "データ削除しました。", 'success'); self.updateList(); } else { openDialog('.dialog', "データ削除に失敗しました。\n" + res.error.messaofficee, 'warn'); } closeLoadingModal(); }).fail(function( jqXHR, textStatus, errorThrown ) { openDialog('.dialog', "データ保存に失敗しました。\n" + jqXHR.responseJSON.error.messaofficee, 'warn'); closeLoadingModal(); }); }.bind(work_reason); return work_reason; } // データ全体にイベント設定 function addEventToArray(work_reasons) { return work_reasons.data.map(addEvents); } /*** 画面表示データ更新 ***/ self.updateList = function() { openLoadingModal(); $.getJSON( "/car-maintenance/MtWorkReasons/search", function( data ) { if (data.success) { data.data = addEventToArray(data); self.work_reasons( data.data); } else { openDialog('.dialog', 'データ取得に失敗しました。', 'warn'); } closeLoadingModal(); }); }; /*** 新規登録 ***/ self.newDetail = function() { this.detail.id(0); this.detail.work_reason_number(''); this.detail.work_reason(''); this.detail.orderNo(1); openModal('.new-btn', '.work_reason-edit-modal'); }.bind(self); /*** 保存 ***/ self.saveDetail = function() { openLoadingModal(); var url = '/car-maintenance/MtWorkReasons/detail'; var id = this.detail.id(); if (id > 0) { url = url + '/' + id; } $('#work_reasonEditForm').attr('action', url); webapi.sendForm('#work_reasonEditForm') .done(function( res ) { // 成功 if (res.success) { openDialog('.dialog', "データを保存しました。", 'success'); } else { openDialog('.dialog', "データ保存に失敗しました。\n" + res.error.message, 'warn'); } self.updateList(); }).fail(function( jqXHR, textStatus, errorThrown ) { // 失敗 console.log( 'ERROR', jqXHR, textStatus, errorThrown ); closeLoadingModal(); openDialog('.dialog', "データ保存に失敗しました。\n" + jqXHR.responseJSON.error.message, 'warn'); }); this.updateList(); }; self.updateList(); }; ko.applyBindings(new work_reasonModel()); $('#work_reasonEditForm').on('submit', function() { $('#work_reasonSaveButton').trigger('click'); return false; }); });
m.ts10806

2019/11/20 05:42

ちゃんと読んでませんが、関連するところだけで良いとは思います。要は送信ボタンが押された関連のところだけ
kuuhaku4262

2019/11/21 05:29

時間がある時に、修正します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問