LoginSignup
5
5

More than 5 years have passed since last update.

PhpStormでSilexのコード補完(3)

Posted at

以前、PhpStormでSilexのコード補完(2)に続き、3回めの記事です。
前回、前々回で、

  • $appのキー補完
  • FormTypeやQueryBuilderの補完

が出来るようになりました。

今回は、PhpStormのAdvanced Metadata という補完の仕組みを使って、EC-CUBEのフックポイントで引数として渡ってくる$eventを補完してみようと思います。

環境

PhpStorm 2016.3 を使ってます。

Advanced Metadataとは

いわゆるサービスロケータなメソッドに対し、引数の文字列に応じて返却する型を指定できる仕組みです。これにより、/** @var XXX $var */としなくてもコード補完が効くようになります。

設定を書いてみる

プロジェクトのルートディレクトリに、.phpstorm.meta.phpというファイルを作成します。
ここでは、$event->getArgument('Product');が呼び出されたときに, 戻り値の方がEccube\Entity\Productになるように指定しています。

<?php

namespace PHPSTORM_META {

    // \Eccube\Event\EventArgs::getArgument()メソッドを指定
    override(\Eccube\Event\EventArgs::getArgument(0), // (0)は固定
        map([
            // getArgumentの引数が`Product`のときはProductのエンティティである、と指定
            'Product' => \Eccube\Entity\Product::class,
        ]));
}

.phpstorm.meta.phpを作成すると、以下のようなコードで、コード補完が行われるようになります。

ok.png

.phpstorm.meta.phpのサンプル

フックポイントでよく出てくる引数をまとめてみました。よければ使ってみて下さい。

<?php

namespace PHPSTORM_META {

    override(\Eccube\Event\EventArgs::getArgument(0),
        map([
            'Product' => \Eccube\Entity\Product::class,
            'ProductClass' => \Eccube\Entity\ProductClass::class,
            'Parent' => \Eccube\Entity\Category::class,
            'TargetCategory' => \Eccube\Entity\Category::class,
            'Order' => Eccube\Entity\Order::class,
            'OriginOrder' => \Eccube\Entity\Order::class,
            'TargetOrder' => \Eccube\Entity\Order::class,
            'Shipping' => \Eccube\Entity\Shipping::class,
            'Customer' => \Eccube\Entity\Customer::class,
            'CustomerAddress' => \Eccube\Entity\CustomerAddress::class,
            'form' => \Symfony\Component\Form\FormInterface::class,
            'builder' => \Symfony\Component\Form\FormBuilderInterface::class,
            'qb' => \Doctrine\ORM\QueryBuilder::class
        ]));
}
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5