cakephpでブックマークアプリを作る(5)-1
Cakephpでブックマークアプリ作成も、いよいよ終盤に差し掛かってきました。
今までDBに直接入れておいたデータや、管理画面から追加したデータを編集するプログラムを作っていきます。
Cakephpのデータ登録の仕組み
idがあれば(このidとはpostsテーブルのidフィールドのこと)データの更新を行い、
idが無ければ新規投稿を行う
これを頭に入れておいてください。
編集画面のedit.ctpを作る
こちらを開いて、前回作成したadd.ctpを複製してedit.ctpという名前にしておいてください。
編集用のfunction editの作成
function edit($id = null) {
$this->Post->id = $id;
if (empty($this->data)) {
$this->data = $this->Post->read();
} else {
if ($this->Post->save($this->data['Post'])) {
$this->redirect('/posts');//処理完了後、/postsへリダイレクトされる
}
}
}
アクションの解説はのちほど。
一覧に編集用のリンクを作成
index.ctpファイルを編集します。一覧から編集できるようリンクの追加です。
<table>
<tr>
<th>サイト名</th>
<td>URL</td>
<td>編集</td>
<td>登録日時</td>
<td>更新日時</td>
</tr>
<tr>
<?php foreach ($posts as $post ): ?>
<th><?php echo $post['Post']['title'];?></th>
<td><?php echo $post['Post']['url'];?></td>
<td><a href="/bookmark_master/posts/edit/<?php echo $post['Post']['id'];?>">修正</a></td>
<td><?php echo $post['Post']['created'];?></td>
<td><?php echo $post['Post']['modified'];?></td>
</tr>
<?php endforeach; ?>
</table>
これで今回の編集用のアクションとビューが完成しました。それでは実際にデータを編集してみましょう。
これで書き方は一切間違ってはいないのに、エラーが出てしまうんです。
どんなエラーが出るのか、実際にやってみた
この動画の通り、サブミットボタンを押した瞬間何やらエラーが発動してしまいます。
そして一覧ページに戻ってみると、さきほど修正したデータが問題なく修正されていることが分かります。
http://ortk.main.jp/blog/?p=76
PHPの設定によっては問題ないのですが、このブログを更新している自宅マシンのXamppのphp.iniの設定により、発生する問題だったようです。
『書き方は間違ってないのに、この動画と全くおなじ
Cannot modify header information – headers already sent by…
のエラーが出たらphp.iniの変更を行ってください。
php.iniの変更
php.iniを開いて、
output_buffering = Off →
output_buffering = On
とするだけで、この問題は解決します。
(今日、この記事を書くまで実はこのエラーに出くわしたことが無かったので正直あせりましたが、いい勉強になりました。)
その後Apach再起動をすると、エラーが出なくなり、データの更新も無事行われていることが確認出来ます。
細かい解説は、cakephpでブックマークアプリを作る(5)-2で行いたいと思います。