参考にさせて頂いたページ
データの追加・更新・削除(3/3):初心者のためのCakePHP2.0 プログラミング入門
del.ctpの作成とその記述内容
ほぼeditと同じ。
参考ページにならって以下の通りですが、
- $this->request->dataの中も確認したい
- データベースに入っているデータの表示もしたい
ので、今回も自分なりに追記しています。
<h1>Edit Page</h1>
<p>MySampleData Delete Form.</p>
<?php
echo $this->Form->create('MySampleData');
echo $this->Form->input('id');//name="data[MySampleData][name]"のinput要素
echo $this->Form->input('name');//name="data[MySampleData][name]"のinput要素
echo $this->Form->end('Submit');//type="submit"のinput要素(クリックするとpost送信する)
?>
<!--$this->request->dataに何が入っているのか表示してみる-->
<pre>
<?php print_r($this->request->data); ?>
</pre>
<!--MySampleDataテーブルの内容を全て表示-->
<table>
<?php foreach ($datas as $data): ?>
<tr>
<td><?php echo $data['MySampleData']['id']; ?></td>
<td><?php echo $data['MySampleData']['name']; ?></td>
<td><?php echo $data['MySampleData']['mail']; ?></td>
<td><?php echo $data['MySampleData']['tel']; ?></td>
</tr>
<?php endforeach; ?>
</table>
MySampleDatasController.phpの記述内容
参考ページにならって以下の通り。
ここまでやってきたindex,find,add,editに続いて、delアクションを追記した。
自分なりにViewに追記したテーブル表示のために、データ取得処理も記述している。
<?php
App::uses('AppController', 'Controller');
class MySampleDatasController extends AppController {
function index(){
// レイアウト関係
$this->layout = "Sample";
$this->set("header_for_layout","Sample Application");
$this->set("footer_for_layout","copyright by SYODA-Tuyano. 2011.");
// 以下がデータベース関係
$datas = $this->MySampleData->find('all');
$this->set('datas',$datas);
}
function find(){
$this->set("header_for_layout","Sample Application");
$this->set("footer_for_layout","copyright by SYODA-Tuyano. 2011.");
if (isset($this->data['id'])){
//find.tplでsubmitした文字列を$idに格納
$id = $this->data['id'];
//MySampleDataモデルクラスのレコードのうち、idが$idと等しいレコードを$statusに格納
$status = array(
'conditions' => array(
'MySampleData.id' => $id
)
);
//$statusに入っている最初の要素を$dataに格納
$data = $this->MySampleData->find('first', $status);
} else {
$data = null;
}
//$dataをset
$this->set('data',$data);
}
public function add() {
// レイアウト関係
$this->layout = "Sample";
$this->set("header_for_layout", "Sample Application");
$this->set("footer_for_layout",
"copyright by SYODA-Tuyano. 2011.");
// post時の処理
if ($this->request->is('post')) {
$this->MySampleData->save($this->request->data);
}
// 表示用にテーブルのデータを取得してset
// Model/MySampleData.phpの中の、MySampleDataクラスを実行してると思う。find('all')はextendされたメソッド。
$datas = $this->MySampleData->find('all');
$this->set('datas',$datas);
}
public function edit($id) {
// レイアウト関係
$this->layout = "Sample";
$this->set("header_for_layout", "Sample Application");
$this->set("footer_for_layout",
"copyright by SYODA-Tuyano. 2011.");
$this->MySampleData->id = $id;
if ($this->request->is('post') || $this->request->is('put')) {
//postまたはputでこのURLにアクセスした場合(データベースの更新とリダイレクト)
$this->MySampleData->save($this->request->data);
$this->redirect(array('action' => 'index'));
} else {
// それ以外のアクセスの場合(データベースから値を取得して"$this->request->data"に格納)
$this->request->data =
$this->MySampleData->read(null, $id);
}
// 表示用にテーブルのデータを取得してset
// Model/MySampleData.phpの中の、MySampleDataクラスを実行してると思う。find('all')はextendされたメソッド。
$datas = $this->MySampleData->find('all');
$this->set('datas',$datas);
}
public function del($id) {
// レイアウト関係
$this->layout = "Sample";
$this->set("header_for_layout", "Sample Application");
$this->set("footer_for_layout",
"copyright by SYODA-Tuyano. 2011.");
$this->MySampleData->id = $id;
if ($this->request->is('post') || $this->request->is('put')) {
//postまたはputでこのURLにアクセスした場合(データベースの更新とリダイレクト)
$this->MySampleData->delete($this->request->data('MySampleData.id'));
} else {
// それ以外のアクセスの場合(データベースから値を取得して"$this->request->data"に格納)
$this->request->data =
$this->MySampleData->read(null, $id);
}
// 表示用にテーブルのデータを取得してset
// Model/MySampleData.phpの中の、MySampleDataクラスを実行してると思う。find('all')はextendされたメソッド。
$datas = $this->MySampleData->find('all');
$this->set('datas',$datas);
}
}
生成されるformのhtmlソース
<form accept-charset="utf-8" method="post" id="MySampleDataDelForm" action="/cakephp/my_sample_datas/del/8">
<div style="display:none;">
<input type="hidden" value="PUT" name="_method">
</div>
<input type="hidden" id="MySampleDataId" value="8" name="data[MySampleData][id]">
<div class="input text">
<label for="MySampleDataName">Name</label>
<input type="text" id="MySampleDataName" value="name8" maxlength="255" name="data[MySampleData][name]">
</div>
<div class="submit">
<input type="submit" value="Submit">
</div>
</form>
気付いたこと
echo $this->Form->create('MySampleData');
で生成したform要素は以下の通りでmethod="post"
でaccept-charset="utf-8"
という属性もついていた。
<form id="MySampleDataDelForm" accept-charset="utf-8" method="post" action="/cakephp/my_sample_datas/del/8">
以下のようなtype="hidden"の要素も生成されていた。
<div style="display:none;">
<input type="hidden" value="PUT" name="_method">
</div>
name="id"の要素はtype="hidden"で以下のように生成されていた。$idとして引数で渡しているからだろうか。
<input type="hidden" id="MySampleDataId" value="8" name="data[MySampleData][id]">
ヘルパーでnameだけ指定した要素は以下のような感じになる。
<div class="input text">
<label for="MySampleDataName">Name</label>
<input type="text" id="MySampleDataName" value="name8" maxlength="255" name="data[MySampleData][name]">
</div>
とりあえず今回はここまで。