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

アソシエーション利用のデータアクセス (1) (4/6)

作成:2015-11-07 10:53
更新:2015-11-07 10:53

■Membersデータの新規作成

Membersデータの新規作成は、専用のフォームを用意したページを作り、フォームを送信したらその内容を保存するような形で実装すればいいでしょう。

まずは、フォームからです。ここでは、以下のような形でフォームを用意しておくことにしましょう。
<?= $this->Form->create($member) ?>
<fieldset>
<legend><?= __('Add Member') ?></legend>
<?php
    echo $this->Form->input('name');
    echo $this->Form->input('mail');
?>
</fieldset>
<?= $this->Form->button(__('Submit')) ?>
<?= $this->Form->end() ?>

$this->Form->create($member)で、コントローラー側から渡された$membersを指定して<form>を作成します。そして$this->Form->inputnamemailの入力フィールドを作成します。後は、このフォームの送信処理をaddメソッドとして用意しておくだけです。

下のリスト欄に、そのサンプルコードを掲載しておきました。ここでは、まずnewEntityで新しいエンティティのインスタンスを用意します。
$member = $this->Members->newEntity();

後は、$this->Members->patchEntity($member, $this->request->data)というようにしてpatchEntityを使い、送信されたフォームの内容を新しいエンティティにマージします。そしてsaveで保存をすれば完了です。
$member = $this->Members->patchEntity($member, $this->request->data);
if ($this->Members->save($member)) ……

基本的には、アソシエーションを設定していないモデルの場合と同じですね。Membersには外部キーもありませんから、ごく普通のモデルと考えて処理して構いません。

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

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

●プログラム・リスト●

public function add()
{
    $member = $this->Members->newEntity();
    if ($this->request->is('post')) {
        $member = $this->Members->patchEntity($member, $this->request->data);
        if ($this->Members->save($member)) {
            $this->Flash->success(__('The member has been saved.'));
            return $this->redirect(['action' => 'index']);
        } else {
            $this->Flash->error(__('The member could not be saved. Please, try again.'));
        }
    }
    $this->set(compact('member'));
    $this->set('_serialize', ['member']);
}

※関連コンテンツ

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