libro
www.tuyano.com
初心者のためのCakePHP3 プログラミング入門

CRUDの基本について (5/9)

作成:2015-09-19 11:13
更新:2015-09-19 11:13

■データの更新(Update)について

続いて、データの更新です。データの更新は、基本的にはデータの新規作成とそれほど大きな違いはありません。エンティティを用意し、保存するだけです。ただし、新しいエンティティではなく、既に保管されているエンティティを修正して保存する、という違いがあります。

やることは似ていますが、しかし実際に作るとなるとかなり大きな違いがあります。新規作成は、ただフォームを用意して送信したものを保存するだけでした。が、更新の場合、まず「どのデータを編集するか?」をサーバーに伝えなければいけません。サーバー側ではその情報を元にエンティティを検索し、その内容をフォームにセットした状態で、「こういうデータだけど、編集しますか?」と尋ねる必要があるわけです。

このためには、フォームにアクセスした時には、既にどのデータを編集するのかわかっていて、そのエンティティをフォームに設定した形で表示する必要があります。整理するなら、

ユーザーが編集するエンティティを指定してサーバーにアクセス
    
そのエンティティをデータベースから取り出し、フォームに設定して表示
    
ユーザーがフォームを編集して送信
    
受け取ったフォームを元に、サーバに保管されているエンティティを更新

――こういう流れで処理をしていかないといけません。なかなかやっかいな作業なのです。では、テンプレート側から作成していきましょう。

Template」内の「Persons」フォルダ内に、「edit.ctp」というファイルを作成して下さい。そして下のリスト欄のように記入をしましょう。

ここでは、フォームエディターを使ってフォームを作成しています。基本的にはadd.ctpと同じですが、一箇所だけ違っているところがあります。
<?= $this->Form->create($person) ?>

最初に<form>タグを生成するところで、createメソッドの引数に$personという値を指定してあります。この$personは、コントローラー側で用意しておくもので、この中に編集するエンティティ(Personインスタンス)が保管されています。

フォームヘルパーのcreateは、引数にエンティティのオブジェクトが渡されると、そのエンティティの値を元にフォームを生成します。つまり、エンティティ内のプロパティの値を、同名のフィールドに値として設定するようになっているのです。これにより、$personのエンティティの値が各入力フィールドに設定された状態で表示されるのです。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

<div>
    <h3>Edit Person</h3>
    <?= $this->Form->create($person) ?>
    <fieldset>
        <?php
            echo $this->Form->input('id');
            echo $this->Form->input('name');
            echo $this->Form->input('age');
            echo $this->Form->input('mail');
        ?>
    </fieldset>
    <?= $this->Form->button('Submit') ?>
    <?= $this->Form->end() ?>
</div>

※関連コンテンツ

「初心者のためのCakePHP3 プログラミング入門」に戻る