15

私はIDEとしてPHPStormを使用していますが、Netbeansなどの他のIDEでも、以下で説明するのと同じ問題が発生すると思います。

Symfony2のようなフレームワークを使用すると、依存性注入の素晴らしい世界が追加されます。したがって、オブジェクトは、次のスニペットのようなコードを使用して簡単にインスタンス化できます。

$myThingy = $this->get('some_cool_service');

オブジェクトは事前に構成されているため、これは非常に便利です。1つの問題は、基本的にすべてのPHP IDEでオートコンプリートが完全に機能しなくなることです。これは、IDEがget()メソッドが返すタイプを認識していないためです。

オートコンプリートを維持する方法はありますか?たとえば、Controllerの拡張機能を作成することが答えになるでしょうか?例えば:

class MyController extends Controller {
    /**
     * @return \MyNamespace\CoolService
     */
    public getSomeCoolService() {
        return new CoolService();
    }
}

次に、アプリケーションコントローラーの場合、Controllerの代わりにMyControllerを基本クラスとして指定しますか?

Factoryクラス、またはその他の可能なメソッドを使用するのはどうですか?

4

5 に答える 5

15

それはもっと複雑ですが、それでもEclipsePDTでこれを行うことができます。

$myThingy = $this->get('some_cool_service');
/* @var $myThingy \MyNamespace\CoolService */

更新このページの例は、phpStormで逆の方法を使用することもできることを示しています。

$myThingy = $this->get('some_cool_service');
/* @var \MyNamespace\CoolService $myThingy */
于 2011-08-27T12:13:13.817 に答える
7

コントローラでプライベートプロパティを定義できます

class MyController extends Controller
{
    /**
     * @var \Namespace\To\SomeCoolService;
     */
    private $my_service;

    public function myAction()
    {
        $this->my_service = $this->get('some_cool_service');
        /**
         * enjoy your autocompletion :)
         */
    }
}
于 2011-08-27T12:19:57.540 に答える
6

バンドルには基本Controllerクラスを使用します。returninメソッドに注釈を付ける必要があります。少なくともそれはEclipseで機能します。

/**
 * Gets SomeCoolService
 *
 * @return \Namespace\To\SomeCoolService
 */
protected function getSomeCoolService()
{
    return $this->get('some_cool_service');
}

/ * var ... * /は、コードに深く入り込むため、好きではありません。サービスがすでにロードされていると誤って想定する可能性があるため、プライベートプロパティは好きではありません。

于 2012-05-31T22:46:17.120 に答える
1

私はKomodoStudioを使用しており、メソッド内であっても@varで変数にタグを付けると、オートコンプリートが保持されます。

namespace MyProject\MyBundle\Controller;

use Symfony\Component\DependencyInjection\ContainerAware;
use Symfony\Component\HttpFoundation\Request;

class WelcomeController extends ContainerAware
{
    public function indexAction()
    {
        /*@var Request*/$request = $this->container->get('request');
        $request->[autocomplete hint list appears here]
    }
}
于 2011-08-27T13:01:28.783 に答える
0

NetBeans IDE7.1.2PHPでの作業

于 2012-05-31T22:35:41.310 に答える