2013-02-26 2 views
6

私はsymfony 2で開発を開始しており、多くの依存関係注入を使用しています。 netbeansが文字列に基づいてオブジェクトの型を検出し、そのメソッドで自動的に完了するようにする方法があるかどうかを知りたいですか?Symfony 2からメソッドを自動完成する方法DIのnetbeans

たとえば、$this->container->get('doctrine')Doctrine\Bundle\DoctrineBundle\Registryインスタンスを返します。コンテナ内のキーdoctrineDoctrine\Bundle\DoctrineBundle\Registryに対応します。

何かのように、zendframework 2でも役に立ちます。

私はコントローラに新しいメソッドを作成したくないですし、/ * @var $ var Symfony ... * /、私は自動検出を使用します。

答えて

4

私が知る限り、コンテナが返すオブジェクトの型をIDEが検出する方法はありません。私の解決策は、コンテナへの呼び出しをプライベートゲッター関数にラップすることです。 IMHOでは、コードの可読性が向上します。特に、この呼び出しをクラスごとに2回以上行うと、コードの可読性が向上します。

/** 
* @return \Doctrine\Bundle\DoctrineBundle\Registry 
*/ 
private function getDoctrine() 
{ 
    return $this->container->get('doctrine'); 
} 
+0

:下の画像を参照してください。 http://netbeans.org/bugzilla/show_bug.cgi?id=226725 – dextervip

+1

でこれを提案する問題を開いた。これは私がやっていることでもあります。一般的に 'protected'は' private'より優先されるべきです(理論上の)子クラスがゲッターを使用すべきではない特定の理由があります。 – halfer

0

IDE "PhpStorm"は、 "use"宣言を提案することができます。 そしてこのIDEは、Symfony2とDrupalのための特定の機能を提案しています!

はJetBrainsのが編集: http://www.jetbrains.com/phpstorm/(...と、時間はお金である)

無料ではありませんが、時間の者協会の時間を短縮するのに十分なパワーフル

お楽しみください:)

0

phpStorm:

$foobar= $this->get('foobar'); //returns mixed 
/* @var \MyNamespace\FooBar $foobar*/ 

または

$foobar= $this->get('foobar'); //returns mixed 
/* @var FooBar $foobar*/ 

あなたは日食PDTでこれを行うことができます:symfonyのサービスになると

$foobar= $this->get('foobar'); //returns mixed 
/* @var $foobar \MyNamespace\FooBar*/ 
0

(歩き回っ):

代わりの

$doctrine = $this->container->get('doctrine'); 

使用

$doctrine = $this->getDoctrine(); 

として、あなたが見ることができます、Symfonyは、あなたがそのサービスのほとんどにアクセスすることを可能にします直接変数$thisからです。 NetBeansは、使用する自動補完機能を認識します。

これは(コントローラクラス内)を働き、なぜ顔をしていることができます

enter image description here

コントローラクラスの輸入レジストリクラスので

use Doctrine\Bundle\DoctrineBundle\Registry; 

し、その後で、USE文で可能ですメソッドの注釈アノテーション返すオブジェクト型を宣言する

/* 
* @return Registry 
*/ 

$ this-> container-> get( 'doctrine');をコールすると、それから、自動補完は省略され、あなたは以下のものを使用しなければなりません。

(回答)これまでのマジックオートコンプリートは動作しません。 Php Stormを使用します(あなたが要求するものを実行します)。 NetBeansに固執する人は、以下の例のように手作業による注釈を使用する必要があります。

NetBeansは、自動補完に使用するクラスを指すことができます。インポートするサービスのためのプロジェクトのディレクトリ検索から端末に

1):

PHPのbin /コンソールデバッグ:コンテナ

あなたが使用するため、代わりにこの探して何を知っている場合:

php bin/console d:コンテナ| grepの教義

...

教義--------------------------------- ----------------------- 教義\バンドル\ DoctrineBundle \レジストリ

...

2)これがない場合にはサービスの使用get_class() PHPはオブジェクトのクラス名を取得するために関数をビルドします。またはリフレクションクラスを使用します。それはあなた次第です。あなたが読みやすくするために、クラス名宣言USE文を知っていたら

use Doctrine\Bundle\DoctrineBundle\Registry; 

4)は今、WENは、我々は我々がNetBeansのを通知する準備ができている特定の変数内のオブジェクトインスタンスのクラス名が何であるかを知っている

3)コメントの注釈を使って自動補完を可能にすることで私たちが知っているもの。

/** 
    * @var $doctrine Registry 
    */ 
    $doctrine = $this->container->get('doctrine'); 

自動完了が有効になりました。その後、はCtrl +スペースキーを押す

$doctrine->| 

を入力します。はい、私はこの解決策を知っているが、それは私が探しています何まだありません

enter image description here

関連する問題