CakePHP勉強中

CakePHP プログラマーズ リファレンスガイド付録 A. Cake ブログチュートリアルを勉強した

触ってなんとなく分かった気になりました。あとでまた解説を読み返す必要があると思う。
CakePHP修行! アーカイブ | IDEA*IDEA#000#005が同じくこのチュートリアルに挑戦しているので、参考になります。

10分で作るCakePHPアプリ for Windows - p4lifeを見た。

CakePHPがちっと古いけどフレームワークの威力を知るために一度見ておく価値があるNE!
ちょっと気になったんだけどviewsの下にモデル名のディレクトリを作るだけで中身空でもビューって見れちゃうの?
$scaffoldを試してみる(CakePHP修行 #009) | IDEA*IDEAで判明
scaffoldて機能だったのか。

連載:CakePHPで高速Webアプリ開発|gihyo.jp勉強した

現在連載のToDoアプリ作成をイジってみました。

尚、この連載のサイトリンク集はどんなときに参照するサイトとして便利かという解説付きで便利
第3回 ここはおさえておきたい,CakePHP情報サイトリンク集|gihyo.jp

第8回で触れられていたAjaxヘルパーの部分がかなり参考になったというか、CakePHPスゲーを体験出来た。

以下に記事中のものを作成してみた指摘を書いた。
CakePHPで作るToDoアプリ : akiyan.comトラックバックしといたので指摘が反映されると嬉しい。

指摘1 第2回のネイティブ関数の短縮表記について

これはかなりちっちゃーい指摘なんだけど。
print_r();とCakePHPで用意してあるpr();はちょっと違う。(前後にpreタグが挿入されるのでprの方がほんのり便利)

指摘2 第4回 2/2のデータベース設定だと文字化けする。

現在XAMPPでテスト中だが、DBからの読み出しで文字化けする。
cake/app/config/database.configに"'encoding' => 'utf8',"を追加しないと、DBからの読み出し時に文字化ける。(ガイドブックでコラムで分かった)
これはMySQLのバージョンに起因するらしいが、連載ではMySQLのバージョンに言及してないから、読み手側で対応する必要があるのだろうが、
わざわざテーブル作成時にUTF-8指定しているので、ちょっと不親切かも。

// app/config/database.php を書き換えた例
class DATABASE_CONFIG {
  var $default = array(
    'driver'   => 'mysql',
    'connect'  => 'mysql_connect',
    'host'     => 'localhost',
    'login'    => 'gihyo',
    'password' => 'gihyopass',
    'encoding' => 'utf8', //ここが足りない
    'database' => 'gihyo_cake',
    'prefix'   => '',
  );
}
指摘3 第5回 2/3でtasks_controller.phpの記述が<?phpと?>で囲まれてない。

結果クラス未定義だと言われエラーになる。
リスト2 コントローラの部分が<?php ?>でくくられていない。

<?php //ここが足りない
// app/controllers/tasks_controller.php
class TasksController extends AppController {
  var $name = 'Tasks';
  var $uses = array('Task');
  function index() {
    $this->set('tasks', $this->Task->findAll(null, null, 'Task.created ASC'));
  }
}
?> //ここが足りない
指摘4 第5回 3/3でtaks.phpもエラーにはならないけど、終了の?>が無い。

リスト3 app/model/task.phpの部分が?>で閉じられていない。

<?php
// app/model/task.php
class Task extends AppModel {
  var $name = 'Task';
}
?> //ここが足りない
指摘5 第6回 1/3でリスト1のformタグにmethod指定が無い。

後述の解説では記述されているが、最初のリスト部分に記述が無い
結果として、tascks_controller.phpの処理のなかで$this->dataがemptyとなってしまい。書き込みがされない。
※他の設定にもよると思うが、多分GET扱いになってしまい、dataがurlに含まれる形になってしまう。

<form action="<?php echo h($html->url('/tasks/add')) ?>" style="margin-bottom:1em"> // ここにmethod="post"が無いとダメ
<p><?php echo $html->input('Task/content') ?>
<?php echo $html->submit('タスクを追加') ?></p>
</form>

<table>
<tr>
<th>Id</th>
<th>タスク内容</th>
<th>状態</th>
<th>作成日</th>
</tr>
<?php foreach ($tasks as $task) { ?>
<tr>
<td><?php echo h($task['Task']['id']) ?></td>
<td><?php echo h($task['Task']['content']) ?></td>
<td><?php echo h($task['Task']['status']) ?></td>
<td><?php echo h($task['Task']['created']) ?></td>
</tr>
<?php } ?>
</table>