2008-02-04
■[CakePHP][Eclipse]Eclipse PDTでCakePHP開発、まず設定すべきこと

Eclipse PDTを使う理由の1つは、その強力なコード補完機能です。
CakePHPを使った開発でもそれを最大限に活かさないのはもったいない!ということで、各所で既出な情報ではありますが、自分の備忘録を兼ねて書きます。
知らない人は今すぐ設定することをオススメします。この設定をすると開発効率は格段にあがると思います。
Viewファイルのコンテンツタイプの設定
Viewファイル(1.1系だと.thtml、1.2系だと.ctpが拡張子のファイル)は、デフォルトではただのテキストファイルとして扱われ、phpコードの補完機能が使えません。
これらはコンテンツタイプの設定をすることで、phpコンテンツとしてEclipseでは認識され、コードの補完もできるようになります。
その設定方法はというと、以下の通り。
- メニューバーの「ウィンドウ」⇒「設定」を選択
- 設定画面の左側の「一般」⇒「コンテンツ・タイプ」を選択
- 設定画面の右側上部で「テキスト」⇒「PHP コンテンツ・タイプ」を選択
- 設定画面の右側の「追加」ボタンを押して"*.ctp"(もしくは"*.thtml")を追加
- 設定画面の右側下部の「ファイルの関連付け」に追加したものが表示されている事を確認して「OK」ボタンをクリック
Viewファイル内で使うヘルパーのコード補完
Viewファイルの中で多用するヘルパーの変数($html,$formなど)はデフォルトではコード補完がききません。
その変数が何のオブジェクトなのかEclipseに教えてあげる必要があります。
この設定はCode completion in views with Eclipse PDT - cakebakerで紹介されている方法を用います。
app/configフォルダの下にcode_completion.php等の適当な名前で以下のコードを保存すると、Eclipseがそれぞれの変数が何のオブジェクトであるかを認識し、Viewファイル内でヘルパーのコード補完が出来るようになります。
<?php // stop page loading exit; // reference helpers so Eclipse provides code completion $ajax = new AjaxHelper(); $cache = new CacheHelper(); $form = new FormHelper(); $html = new HtmlHelper(); $javascript = new JavascriptHelper(); $number = new NumberHelper(); $session = new SessionHelper(); $text = new TextHelper(); $time = new TimeHelper(); ?>
以上は1.1系のヘルパーですが、自作のヘルパーや、XmlHelperやPaginatorHelperなど1.2系で追加されたヘルパーは、適宜ここに追記すると良いでしょう。
Controller内で使うモデル、コンポーネント等のコード補完
Controller内で自動的に設定された、もしくは$usesや$componentsで指定して設定したモデルやコンポーネントは、フレームワークが$this->Hogehogeという形でセットしたクラス変数になります。
これらも通常は$this->Hogehogeの先のコード補完は出来ないのですが、ひと手間かけてあげると出来るようになります。
やりかたは
<?php class HogehogesController extends AppController { /** * Hogehogeモデル * * @var Hogehoge */ var $Hogehoge; /** * セッションコンポーネント * * @var SessionComponent */ var $Session; … … … }
といった具合に、あらかじめ変数を書いておき、コメントの@varでクラス名を指定しておきます。
そうすると$this->Hogehogeや、$this->Sessionなども何のオブジェクトであるかが認識され、コード補完がきくようになります。
毎回それぞれのControllerに書くのが面倒であれば、全てのモデル・コンポーネントについて、継承元のAppController内にあらかじめ纏めて書いてしまうという荒業も一つの手だと思います。
まとめ
たったこれだけのセットアップで、自分でタイピングする量はかなり減り、それ以降の開発効率が格段に違います。
クドイですが、まだ設定をしていない方は今すぐの設定をオススメします。
- 8 http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/ngtn/20080131/1201791505
- 3 http://reader.livedoor.com/reader/
- 2 http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=961&forum=3
- 2 http://swik.net/Eclipse/del.icio.us/tag/eclipse/Eclipse+PDTでCakePHP開発、まず設定すべきこと+-+Writing+Some+Code/b2guj
- 1 http://b.hatena.ne.jp/add?mode=confirm&title=&url=http://d.hatena.ne.jp/ngtn/20080204/1202142255&is_bm=
- 1 http://b.hatena.ne.jp/add?mode=confirm&title=bake%u3059%u308B%u306E%u306B%u5730%u5473%u306B%u4FBF%u5229%u306AEclipse%u30D7%u30E9%u30B0%u30A4%u30F3 - Writing Some Code&url=http://d.hatena.ne.jp/ngtn/20080131/1201791505
- 1 http://b.hatena.ne.jp/entry/7345289
- 1 http://d.hatena.ne.jp/keyword/Ajax
- 1 http://d.hatena.ne.jp/n314/20080205/1202213010
- 1 http://d.hatena.ne.jp/shin/20080204/p2





ただ、PDT0.7では、Hogehoges_controllerの中で
$this->Hogehoge、と書いてもその先の”findAll”などは補完されないようでした。
モデルのメソッドまでは補完できないのでしょうか?
コンテンツタイプの設定とヘルパーのコード補完を設定しただけですが、開発が10倍楽になりました。
有益な情報をありがとうございます。