somemo's diary

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【Eclipse】Symfony2とPHPのプラグイン

Symfony2とPHPEclipseプラグインのインストールメモです。

開発者

インストールの前に、今回インストールするプラグイン開発者pulse00 (Robert Gruendler)さんのGithubアカウントがありました。

BundleやSilexで作成されたアプリなどSymfony2コンポーネントを利用しているようです。

アップデートサイト

http://pulse00.github.com/p2/です。開発者のBlogやgithubへのリンクなどがあります。

プラグイン

今回インストールするプラグインは、以下の4つです。

PDT Extensions Feature
新規phpクラスとセッター・ゲッター生成のウィザード追加
PHP Development Tools (PDT) Runtime Feature
詳細不明
Symfony Feature
Symfonyコンポーネントと、Doctrine、Twigのコード補完
Twig Editor Feature
Twig用エディタ

YAML用エディターYEditもあるのですが、いつのまにインストールしていたので対象外です。

4つインストールを実行しましたが、失敗しました。理由は、動的言語ツールキットのバージョン違いです。4系が必要なのですが、3系が入っているためです。以下の2つをアンインストールして対応しました。4.0は初めてみたので、Symfonyに特に思い入れがない場合、推奨しません。eclipseはPlugin関係で正常に動かなくなることがとても多いと思っています。

アンインストール後、インストールを実行すると、Doctrineのコードアシストが追加されていました。

設定

ウィンドウタブの設定を押下すると、以下のとおり追加されていました。

  • PHP
    • コード・スタイル
      • コード・テンプレート
      • フォーマッター(PDT Tools)
    • デバッグ
      • インストール済みのデバッガ
  • Symfony
    • サービス
    • ライブラリー
  • Twig
    • Codeassist
    • テンプレート
    • 構文の色指定

PHP

まずコード・テンプレートには、以下の2つが追加されていました。

それぞれのテンプレートは、以下のとおりです。

<?php	
namespace ${namespace};

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
	
/**
 *
 *
 * @author ${user}
 */
class ${class_name} extends Controller {

	public function indexAction() {
		${cursor};
	}
	
}
<?php	
namespace ${namespace};

${use_parent}
	
/**
 *
 *
 * @author ${user}
 */
${class_modifiers}class ${class_name} ${extends} ${interfaces} {

	public function __construct() {
		${cursor};
	}
	
	${supermethods}
	
}

コントローラは分かりますが、PHP/Symfony ClassはSymfony2の知識が少ないためよくわかりません・・・。

フォーマッター(PDT Tools)は、Eclipseのビルトインとほぼ同じなので省略します。

インストール済みのデバッガは、標準のXDebugと同じ構成で名前が異なるだけでした。

Symfony

まず、検証の問題をerrorレベルにする設定がありました。

次にサービスです。サービス名と、それに対応するクラスが設定されています。デフォルトは以下のとおりです。

サービス名Service Class
requestSymfony\Component\HttpFoundation\Request

実行時にDIコンテナによって注入されていて、Symfonyのプラグインでは解決できない動的なサービスをここでマッピングすることができます。言いたいことはわかるのですが、Eclipseとしてどう利用すればよいかが分かっていません・・・。

最後にライブラリーについてです。ライブラリーの設定にプルダウンが用意されていて、デフォルトでは2.0.10となっていて、何も追加されていない状態です。こちらもよく分かっていません。

Twig

まず、Codeassistです。閉じタグに関する自動設定を行えます。デフォルトでは以下のようになっています。

Auto-close twig tags


fieldset初めて使ってみました。Eclipse上でもこのような感じです。Twigで実際に入力すると以下のようになります。

  • 「{」を入力すると、「{}」と表示される
  • 「{}」の真ん中で「{」を入力すると、「{{ }}」と表示される
  • 「{}」の真ん中で「%」を入力すると、「{% %}」と表示される

次はテンプレートです。以下のテンプレートが使用できます。

  • block
  • extends
  • foreach
  • form
  • translate

ifはありませんでしたので、追加すればよいと思います。以下、それぞれの展開されたテンプレートのコードです。

{% block name %}
 
{% endblock %}
{% extends '' %}
{% for item in items %}
 
{% endfor %}
<form action="{{ path('path') }}" method="post"{{ form_enctype(form) }}>
{{ form_errors(form) }}
{{ form_rest(form) }}
<input type="submit" />
</form>
{% trans %}  {% endtrans %}

最後に構文の色指定ですが、特に特徴もないので省略します。そのほかには、下記の特徴があります。

  • Eclipseのhtmlテンプレート展開ができる
  • Eclipseのhtml構文が強調される
  • Zen-Codingも使用できる
  • {block }は折りたたみ可能である
  • 上記以外は折りたためない(if, for in, trans)
  • アウトラインにextendsしたテンプレート、変数、blockの階層表示がされる
  • extendsに指定したTwigのコードにCtrl+クリックでジャンプできる(すばらしい)

ここまで説明したものは、PDT Extensions Feature以外の3つだと思います。

PHPクラスの生成

PDT Extensions Featureの機能の1つです。以下の手順で行えます。

  1. ファイルタブから新規>その他を選択する
  2. PHPの中から、PHP Classを選択し、次へボタンを押下する(追加されている)

なにも起きませんでした・・・。PHP Classをダブルクリックすると下記エラーが発生しました。

エラーが発生しました。詳細については、エラー・ログを参照してください。
java.lang.NullPointerException

PHPエクスプローラで他の場所(プロジェクト本体以外)を選択後、再度行ったら通りました。ワークスペースを指定しているわけでもないので、ECLIPSE_HOME\workspace\.metadata\.logにログはありませんでした。以下続きです。

  1. ファイルタブから新規>その他を選択する
  2. PHPの中から、PHP Classを選択し、次へボタンを押下する(追加されている)
  3. 必要な情報を入力して、クラスファイルを作成する

必要な情報は以下のとおりです。

スーパークラス、インターフェースは一覧を出せず選択できませんでした。以下、作成されたクラスです。

/**
 *
 * @var String
 */
public $test;

public $hoge;

以下、生成されるコードです。

/**
 * @return String
 */
public function getTest() {
  return $this->test;
}

/**
 * @param  $test
 */
public function setTest($test) {
  $this->test = $test;
}

/**
 * @return unknown_type
 */
public function getHoge() {
  return $this->hoge;
}

/**
 * @param unknown_type $hoge
 */
public function setHoge($hoge) {
  $this->hoge = $hoge;
}

生成前に変数の型を指定しておくと、コメントにも反映されます。ただし、ゲッターのみです。

まとめ

Twigがとても便利でした。特に継承したものにジャンプできる機能はすばらしい!そのほかの機能は、Twigに比べると印象に残らなかったので。他のIDEやVi/EmacsといったカスタマイズできるエディタにTwig機能があるならば、無理にEclipseにしなくてもようさそうです。