スポンサードリンク
はい、先日から始めたCakePHPの開発日記
もう心が折れそうです。
・・・早っ!
いやいや、今日も少しでも進めていきますよ。
今回は、前回設定したものの続きです。
今回もCakePHPのチュートリアルを見て進めていきます。
スポンサードリンク
CakePHPの命名規則
CakwPHP命名規約はとても大切だそうです。
モデル名はコントローラーとデータベースのテーブルに
結びつくので命名規則はとても大事になりますね。
ここで、命名規則ってなんだって思ったので
調べてみました。
CakePHPの命名規則はキャメル方式のようです。
(キャメルケース・・・Wikipediaへ)
まとめるとこんな感じでしょうか?
・コントローラのクラス名は複数形で、最後に Controller が付く。
・モデルは単数形
・ビューは単数形でコントローラーで作ったメソッド名です。
ここで注意なのが、ビューフォルダ内に作るのフォルダは複数形で、コントローラー名で作ります。
・テーブル名は複数形※テーブル名は小文字です。
(例)名前がPostの場合
テーブル名 : posts
ファイル名 | パス | クラス名 | |
---|---|---|---|
コントローラー | PostsController.php | /app/Controller/PostsController.php | PostsController |
モデル | Post.php | /app/Model/Post.php | Post |
ビュー | index.ctp PostsContorollerクラス内にindexメソッドを作った場合 |
/app/View/Posts/index.ctp |
以上です。
命名規則についてはこちらに詳しく載っていました。
参考になりました。
ビューのフォルダ名で少し手こずって
なかなか、表示させれなかったんです。
CakePHPは「設定より規約」(convention over configuration)なので
命名規則は早く慣れたいです。
試しにデータベースのデータを表示させてみた
元々、作ってあるサイトの中身を
CakePHPで書きなおしたいという
思いつきで始めようと思っていたので
いまある、データベースの中身を表示させてみました。
※実際にはテーブル名など違いますので、チュートリアルのものを使ってます。
・モデル
/app/Model/Post.php
class Post extends AppModel { }
・コントローラー
/app/Controller/PostsController.php
class PostsController extends AppController { public $helpers = array('Html', 'Form'); public function index() { $this->set('posts', $this->Post->find('all')); } }
ビュー
/app/View/Posts/index.ctp
<h1>Blog posts</h1> <table> <tr> <th>Id</th> <th>Title</th> <th>Created</th> </tr> <?php foreach ($posts as $post): ?> <tr> <td><?php echo $post['Post']['id']; ?></td> <td> <?php echo $this->Html->link($post['Post']['title'], array('controller' => 'posts', 'action' => 'view', $post['Post']['id'])); ?> </td> <td><?php echo $post['Post']['created']; ?></td> </tr> <?php endforeach; ?> <?php unset($post); ?> </table>
こんな風にして、
アクセスしてみる
おっ、表示されました。
思ったよりも簡単に一覧が表示できました。
ただ、ビューでecho文を書くのが面倒くさいな~
書きなれている
<?= ?>
で表示できるのか試してみました。
<h1>Blog posts</h1> <table> <tr> <th>Id</th> <th>Title</th> <th>Created</th> </tr> <?php foreach ($posts as $post): ?> <tr> <td><?= $post['Post']['id']; ?></td> <td> <?= $this->Html->link($post['Post']['title'], array('controller' => 'posts', 'action' => 'view', $post['Post']['id'])); ?> </td> <td><?= $post['Post']['created']; ?></td> </tr> <?php endforeach; ?> <?php unset($post); ?> </table>
おっ、表示できた!
これが使えるなら少しはやりやすいかも。
今後も少しづつですけど
進めていきます。
そうそう、元々のサイトのテーブル名は複数形ではなかったので
テーブル名を複数形に直さなければいけなかったんです。
その際、SQLでテーブル名書き直しました。
ALTER TABLE 既存のテーブル名 RENAME TO 新しいテーブル名;
(参考)
MySQL で、テーブル名を変更する方法 (ALTER TABLE … RENAME TO …)
スポンサードリンク