シェアする

  • このエントリーをはてなブックマークに追加

[PhpStorm]CakePHPのコード補完

PhpStormでCakePHPのコード補完を効かせる方法です。
CakePHP2系の方法です。CakePHP1系の場合はこの記事の元ネタのHwarf Nugen: Configure PhpStorm to Auto-complete CakePHP Models, Views, and Controllersをご覧ください。

CakePHPコード補完のための準備

CakePHPのコード補完を効かせるためにはまず準備が必要です。
まず以下の2つの作業を行なってください。

ConsoleとTestsディレクトリをプロジェクトの対象からはずす

プロジェクトの対象から外すディレクトリは以下の2つです。

  • /lib/Cake/Console
  • /lib/Cake/Test

【手順】

  1. Ctrl+Alt+Sで設定ダイアログを開く。
  2. Project SettingsセクションのDeployment->Directoriesを選択。
  3. 右のディレクトリツリーから前述の2つのディレクトリを右クリック->Alt+E(Excluded)する。
  4. OKボタンで設定ダイアログを閉じる。

参考元の記事には理由を書いていなかった(と思う)のですが、多分同じファイル名+クラス名がプロジェクト内で重複することを防ぐためだと思います。
ConsoleやTestsにはAppControllerがあったりするので、継承元を特定する際に邪魔になるんじゃないかな?

/lib/Cake/Core/Object.phpをプレーンテキストとみなす

PhpStorm(4.0.1)では、どうやらObjectというクラス名を内部で使用している?ため、Objectクラスを読み込むとObjectを継承しているクラスのプロパティやメソッドのコード補完に問題が出るようです。*[1]
参照元:Code completion using phpdoc :: JetBrains Developer Community

色々試してみましたが、Objectクラス(Object.php)をコード補完の対象外にするしか方法が見つかりませんでした。
以下、その手順です。

【手順】

  1. プロジェクトビューから/lib/Cake/Core/Object.phpを右クリックします。
  2. 右クリックメニューのMark as Plain Textを選択します。

これでObject.phpがコード補完の対象から外れます。
この作業による問題点は、Objectクラスに書かれたrequestActionなどのメソッドやプロパティがコード補完できないことと、Object.phpのコードがカラー表示されなくなることですが、前者はごく一部のプロパティ、メソッドしか存在しないためそんなに困らないですし、後者はObject.phpを触ることは通常ないと思うので問題にならないでしょう。

コントローラでモデルを補完する

CakePHP2でコントローラをbakeすると、PHPDocのpropertyにコントローラに対応するモデルを記述してくれます。

/**
 * Users Controller
 *
 * @property User $User
 */
class UsersController extends AppController {
// ~
}

「CakePHPコード補完の準備」であげた2つの手順を実行した後にpropertyの記述されたコントローラでそのモデルを書くとコード補完が効いているはずです。
他にも使用するモデルがあれば下記の記法でモデルを追加すれば補完対象にすることができます。

/**
 * @property モデル名 $モデル名
 */

コンポーネントを補完する

CakePHP2系ではControllerクラスのPHPDocに、あらかじめコアコンポーネントのpropertyが記述されているので、「CakePHPコード補完の準備」さえ行なっていれば何もしなくてもコード補完されます。

自作のコンポーネントをコード補完対象にしたい場合は、AppContorollerクラスのPHPDocにpropertyを記述すればOKです。

/**
 * @property MyAppComponent $MyApp

ビューでヘルパーを補完する

ビューに対するヘルパーも、コントローラに対するコンポーネント同様に、ViewクラスのPHPDocにコアヘルパーのpropertyが記述されているので、基本的にはコード補完が可能です。

ただ、ビューファイルはクラスではないのでViewクラスを継承していないため、次のようにPHPDocのvarにViewクラスを追記する必要があります。

hoge.ctp

/**
 * @var $this View
 */
ビューファイルの記述。
@varだけ書いたら後は好きにして<b>OK</b>です。

謝辞

下記の記事と、記事に対するコメントがなければ解決できませんでした。素晴らしい記事をありがとうございます!
Many thanks to Mr. Joshua Glemza!

参考:Hwarf Nugen: Configure PhpStorm to Auto-complete CakePHP Models, Views, and Controllers

  1. Google翻訳を駆使して適当に読んでいるので正しいかどうかはわかりませんが・・・σ(^_^; ) []

シェアする

  • このエントリーをはてなブックマークに追加

フォローする