$scaffoldを試してみる(CakePHP修行 #009)

SPONSORED LINK

Pocket

さてCakePHPのお勉強。前回までのあらすじはこちら。

» CakePHP修行! アーカイブ | i d e a * i d e a

さて前回「bake.php=面倒」ということがわかったので(かなり個人的な主観)、今回は$scaffoldをControllerに足す方法を試します。

■ 下準備

試しにやるだけなのでUsersモデルだけでやってみます。イメージでは作業は以下の通り。

  • /app/models/user.phpをつくる
  • /app/controllers/users_controller.phpを作って$scaffoldを追加。
  • /users/にアクセスすれば追加・削除・編集の画面ができているはず!(かな?)

では期待どおりになるかどうか・・・ドキドキしながらやってみます。

■ Usersモデルを作成

/app/models/user.phpを次のように作成。モデルは単数か、覚えないと。まず一つを定義するから、とか覚えておこう。

<?php
class User extends AppModel
{
    var $name = 'User';
}

↑ こんな感じ。最後の「?>」は書かない派ですw。

■ コントローラーをつくるぞ

/app/controllers/users_controller.phpを作ります。こちらは複数ね。

<?php
class UsersController extends AppController
{
    var $name = 'Users';
    var $scaffold;
}

さぁ、これでいいのでしょうかねぇ・・・。できたのか試してみます。

■ /usersにアクセスしてみる

さて・・・と、http://www.codexcode.com/users/にアクセスしてみます。

scaf_1.gif

↑ キターーーーーーー・・・・Warningかよ・・・orz。

前回/app/tmpに777のPermissionを与えましたが、これ、下位フォルダもそうしないとだめっぽかったっすね(つか、当然ですね・・・)。「chmod -R 777 /app/tmp」で解決。

scaf_2.gif

↑ きれいになりました。

なーるほど、これは便利ですね。Viewを書く手間が一気に減りました。うーん、便利かも。

それからマニュアルによるとViewのカスタムも簡単なようです。しかもすべてのモデルに共通するViewも作れるみたい。

各モデルごとなら以下を追加。

/app/views/users/scaffold/index.scaffold.thtml
/app/views/users/scaffold/edit.scaffold.thtml
/app/views/users/scaffold/show.scaffold.thtml
/app/views/users/scaffold/new.scaffold.thtml

すべてのモデルに共通するViewなら以下を追加。

/app/views/scaffold/index.scaffold.thtml
/app/views/scaffold/edit.scaffold.thtml
/app/views/scaffold/show.scaffold.thtml
/app/views/scaffold/new.scaffold.thtml

ちょっと試してみようかと思いましたが、まぁ、将来的に必要になったらやればいいや、ということでScaffoldの実験はこれでおしまい。とりあえずuser_controller.phpから$scaffoldを外しておきます。

さて、やっぱりViewはカスタムで一つずつ作ってみたいので、次回はいよいよ画面のモックアップからViewの設計までいきたいと思います。

ツイッターもやっています!

SPONSORED LINK

    • 高田
    • June 26th, 2007

    CakePHPの記事ドキドキしながら読ませていただいてます。
    chmodでサブフォルダ含めて再帰的に処理するのであれば、「chmod -R 777 [hoge]」ではなく「chmod -R a+w [hoge]」の方が良いかもです。

    a = All User
    + = 追加
    w = Write権限

    「-R」した場合、フォルダだけでなくファイルも処理しちゃうので、いらないファイルに実行権限付くのもなぁ〜って場合にお使いくださいませ。

  1. はじめまして。
    ちょっとだけ
    以前自分もscaffoldのViewをちょっとajax風にしたときがあって、そのときにきづいたんですが、
    リファレンスでは確かに 「index.scaffold.thtml」
    に という記述になっていますが、正しくは scaffold.****.thtml です。
    やらないそうなので、大丈夫っぽいですが一応。

  1. April 7th, 2009