WebプログラミングV

 目次へ 前へ 次へ

2016/2/1 久米

VCakePHP

4. 追加・編集・削除 

4.1 追加

  ファイル コード例 備考
C src>Controller>
NekoChansController.php
<?php
namespace App\Controller;

use App\Controller\AppController;

class NekoChansController extends AppController{

    public function index(){
	$nekoChans = $this->NekoChans->find();
	$this->set('nekoChans', $nekoChans);
    }

    public function add(){
	if($this->request->is('post')){
	    $nekoChan = $this->NekoChans->newEntity();
	    $this->NekoChans->patchEntity($nekoChan, $this->request->data);
	    if($this->NekoChans->save($nekoChan)){
		return $this->redirect(['action'=>'index']);
	    }
	}
    }

}
 
M src>Model>Table>
NekoChansTable.php
無ければデフォルトでオブジェクト生成してくれるので。今回は不要  
V
その1
src>Template>NekoChans>
index.ctp
前ページのindex.ctpと同じ  
V
その2
src>Template>NekoChans>
add.ctp
<div>
<h3>猫ちゃんず追加</h3>
<?= $this->Form->create() ?>
<fieldset>
    <?php
    echo $this->Form->input('name', ['label'=>'名前']);
    echo $this->Form->input('tokugi', ['label'=>'特技']);
    echo $this->Form->input('age', ['label'=>'年齢']);
    ?>
</fieldset>
<?= $this->Form->button('追加') ?>
<?= $this->Form->end() ?>
</div>
 
  アクセス http://localhost/web3/caketest/neko-chans/add  

演習1 index.ctpに新規追加リンクを付けてみよ


4.2 編集

http://ホスト名/アプリケーション/テーブル/アクション/引数1/引数2/・・

http://localhost/web3/caketest/neko-chans/edit/3
とするとNekoYohinsControllerのedit関数が実行される。この時引数$idに3が入って実行される。

  ファイル コード例 備考
C src>Controller>
NekoChansController.php
<?php
namespace App\Controller;

use App\Controller\AppController;

class NekoChansController extends AppController{

    public function index(){
	$nekoChans = $this->NekoChans->find();
	$this->set('nekoChans', $nekoChans);
    }

    public function edit($id = null){
	$nekoChan = $this->NekoChans->get($id);
	$this->set('nekoChan', $nekoChan);
	if($this->request->is(['post', 'put'])){
	    $this->NekoChans->patchEntity($nekoChan, $this->request->data);
	    if($this->NekoChans->save($nekoChan)){
		return $this->redirect(['action'=>'index']);
	    }
	}
    }

}
編集ボタンを押して
飛んでくるのは
postかput
なのでそれを判定

caketest>vendor>
cakephp>cakephp>
src>View>Helper>
FormHelper.php
M src>Model>Table>
NekoChansTable.php
無ければデフォルトでオブジェクト生成してくれるので。今回は不要  
V
その1
src>Template>NekoChans>
index.ctp
今までのやつと同じ  
V
その2
src>Template>NekoChans>
edit.ctp
<div>
<h3>猫ちゃんず編集</h3>
<?= $this->Form->create($nekoChan) ?>
<fieldset>
    <?php
    echo $this->Form->input('name', ['label'=>'名前']);
    echo $this->Form->input('tokugi', ['label'=>'特技']);
    echo $this->Form->input('age', ['label'=>'年齢']);
    ?>
</fieldset>
<?= $this->Form->button('編集') ?>
<?= $this->Form->end() ?>
</div>
create($nekoChan)
で渡された値が
枠の中に入る
  アクセス http://localhost/web3/caketest/neko-chans/edit/1  

演習2 index.ctpに編集リンクを付けてみよ


4.3 削除

  ファイル コード例 備考
C src>Controller>
NekoChansController.php
<?php
namespace App\Controller;

use App\Controller\AppController;

class NekoChansController extends AppController{

    public function index(){
	$nekoChans = $this->NekoChans->find();
	$this->set('nekoChans', $nekoChans);
    }

    public function delete($id = null){
	$nekoChan = $this->NekoChans->get($id);
	$this->set('nekoChan', $nekoChan);
	if($this->request->is(['post', 'put'])){
	    if($this->NekoChans->delete($nekoChan)){
		return $this->redirect(['action'=>'index']);
	    }
	}
    }

}
 
M src>Model>Table>
NekoChansTable.php
無ければデフォルトでオブジェクト生成してくれるので。今回は不要  
V
その1
src>Template>NekoChans>
index.ctp
今までのやつと同じ  
V
その2
src>Template>NekoChans>
delete.ctp
<div>
<h3>猫ちゃんず削除</h3>
<?= $this->Form->create($nekoChan) ?>
<fieldset>
<p>id: <?= h($nekoChan->id); ?></p>
<p>名前: <?= h($nekoChan->name); ?></p>
<p>特技: <?= h($nekoChan->tokugi); ?></p>
<p>年齢: <?= h($nekoChan->age); ?></p>
</fieldset>
<?= $this->Form->button('削除') ?>
<?= $this->Form->end() ?>
</div>
 
  アクセス http://localhost/web3/caketest/neko-chans/delete/5  

演習3 index.ctpに削除リンクを付けてみよ

 

演習4 ネコカフェメニューの、追加、編集、削除を作ってみよ。