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

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

ただいまの
回答率

88.81%

登録,削除確認画面を作りたい

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 525

napojin

score 8

 前提・実現したいこと

cakePHP3.6で、都道府県リストの登録、削除確認画面を作りたいと思っています。

bin/cake bake all Prefecture

で自動生成されたファイルの機能では、データの保存や削除の前に確認画面がなく、ボタンを押した瞬間登録される仕様になっております。

ボタンを押したら、確認画面に移動して、そこで登録ボタンを押して保存したいのですが、
ドキュメントを読んでもわからず、バージョンが3.6なので、他者のブログのやり方とも仕様が変わっていてうまく実現できません。

やり方の例などを教えてもら痛いと思っています。
よろしくお願いします。

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

 Undefined index: prefecture_cd
 Undefined index: prefecture_name となってパラメータが渡らない。

 該当のソースコード

// PrefectureController
// bakeで作られたaddアクション
public function add()
{
  $prefecture = $this->Prefecture->newEntity();
    if ($this->request->is('post')) {
      $prefecture = $this->Prefecture->patchEntity($prefecture, $this->request->getData());
        if ($this->Prefecture->save($prefecture)) {
          $this->Flash->success(__('The prefecture has been saved.'));

          return $this->redirect(['action' => 'index']);
        }
        $this->Flash->error(__('The prefecture could not be saved. Please, try again.'));
      }
      $this->set(compact('prefecture'));
    }
// add.ctp
<div>
  <h3><?= __('地域登録') ?></h3>
  <?= $this->Form->create($prefecture) ?>
  <fieldset>
    <?php
    echo $this->Form->control('prefecture_cd',[
      'label' => '地域コード']);
    echo $this->Form->control('prefecture_name',[
      'label' => '地域名']);

    ?>
  </fieldset>

      <?= $this->Form->button(' 登録 ',[
    'type' => 'submit',
    'class' => 'btn btn-success' // bootstrap 
    ]) ?>
    <?= $this->Form->end() ?>
    <?= $this->Html->link(__(' 戻る '), [
      'controller' => 'Prefecture',
      'action' => 'index'],[
      'class' => 'btn btn-danger' // bootstrap
      ]) ?>
  </div>

 試したこと

// PrefectureControllerを以下のように,パラメータに入れてみた
// 保存動作の代わりに確認画面へリダイレクトする動作に書き換えた
public function add()
    {
      $mstPrefecture = $this->MstPrefecture->newEntity();
      if ($this->request->is('post')) {
        $prefecture = $this->Prefecture->patchEntity($prefecture, $this->request->getData());

        $this->set('prefecture_cd', $this->params['prefecture_cd']);
        $this->set('prefecture_name', $this->params['prefecture_name']);
        $this->redirect(['action' => 'confirm']);
        $this->Flash->success(__('params saved'));
      }
      $this->set(compact('mstPrefecture'));
    }


// 確認画面のアクションを用意した
public function confirm()
    {
    }

// 確認画面のテンプレートを用意した
<h1>新規作成:確認画面</h1>
<form action="add.ctp" method="post">
<div class="required"> 
    <label>地域名</label>
    <?php echo $this->request->data['prefecture_cd']?>
</div>
<div class="required"> 
    <label">地域コード</label>
    <?php echo  $this->request->data['prefecture_name']?>
</div>
<div class="submit">
<input type="button" value="戻る" onclick="history.go(-1)" /> 
<input type="submit" value="作成" /></div>
</form>

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

エラー
Undefined index: prefecture_cd
Undefined index: prefecture_name となってパラメータが渡らない。

バージョン3ではバージョン2とだいぶ違うみたいで、他の方のやり方だとうまくいきません。
ぜひ、わかる方がいたらご対応よろしくお願いします。
ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • m6u

    2018/09/03 09:43

    cakephpを使わずに一連の実装ができる人なのかな? それともphpの習得そこそこに先にcakephpをがんばっちゃってる人なのかな?

    キャンセル

  • napojin

    2018/09/03 11:23

    cakePHPは初めて2週間です。phpもほぼ初心者です。今回のプロジェクトがPHP限定だったので死に物狂いでやってますがどうしても確認画面が作れないのです...

    キャンセル

  • m6u

    2018/09/03 12:48 編集

    ここで一言二言伝えてあなたができるようになるようには思えない。となれば、画面に関係する範囲のデータベース上のデータ構造をCREATE TABLE文やINSERT INTO文などで第三者が再現できるようにするのが先。面倒でも第三者に理解してもらえる努力をしてほしい。(私はphpはかじっていてもcakephpはかじってないので回答できませんが、見守っています。)

    キャンセル

  • tonkun4os

    2018/09/14 20:31

    自分がするならJQueryで処理するけど、ダメ?

    キャンセル

まだ回答がついていません

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

  • ただいまの回答率 88.81%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る