cakephpでブックマークアプリを作る(5)-1 ITかあさん

ITかあさん

cakephpでブックマークアプリを作る(5)-1

Cakephpでブックマークアプリ作成も、いよいよ終盤に差し掛かってきました。
今までDBに直接入れておいたデータや、管理画面から追加したデータを編集するプログラムを作っていきます。

Cakephpのデータ登録の仕組み

idがあれば(このidとはpostsテーブルのidフィールドのこと)データの更新を行い、
idが無ければ新規投稿を行う

これを頭に入れておいてください。

編集画面のedit.ctpを作る

C:\xampp\htdocs\bookmark_master\app\views\posts

こちらを開いて、前回作成した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で行いたいと思います。

初夏のJavaScript祭 in サーキュレーションビル ForPro