chinaphp/yii2-ide-helper

Yii2 IDE Helper - 为 Yii2 框架提供 PhpStorm 智能代码补全支持

Installs: 1

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/chinaphp/yii2-ide-helper

v1.0.1 2026-01-27 14:14 UTC

This package is auto-updated.

Last update: 2026-01-27 14:21:52 UTC


README

为 Yii2 框架提供 PhpStorm 智能代码补全支持,灵感来源于 barryvdh/laravel-ide-helper

Latest Stable Version Total Downloads License

功能特性

  • ✅ 为 Yii2 组件生成完整的 PHPDoc 类型提示
  • ✅ 为 ActiveRecord 模型生成属性和方法文档
  • ✅ 为 ActiveQuery 生成查询构建器提示
  • ✅ 生成 PhpStorm Meta 文件支持高级 IDE 特性(DI 容器、类型推断)
  • ✅ 支持自定义配置路径
  • ✅ 完整的 CLI 命令支持
  • ✅ 支持多数据库(MySQL、PostgreSQL、SQLite)

安装

要求

  • PHP >= 7.4
  • Yii2 >= 2.0.43
  • PhpStorm 2018.2 或更高版本

使用 Composer 安装

composer require --dev chinaphp/yii2-ide-helper

配置

console/config/main-local.php 中添加以下配置(仅本地开发环境需要):

<?php

$config = [
    'controllerMap' => [
        'ide-helper' => 'Chinaphp\Yii2IdeHelper\Console\Controller',
    ],
    'components' => [
        'ide-helper' => [
            'class' => 'Chinaphp\Yii2IdeHelper\Config\ConfigProvider',
            'output_dir' => dirname(__DIR__),
            'filename' => '_ide_helper.php',
            'meta_filename' => '.phpstorm.meta.php',
            'config_paths' => [
                '@app/config/web.php',
                '@app/config/console.php',
            ],
        ],
    ],
    ],
];

使用

生成组件类型提示

php yii ide-helper/generate

这将生成 _ide_helper.php 文件,包含所有 Yii2 组件的类型提示。

生成的内容:

  • Yii 组件的 @property 注解(如 $db, $cache, $session
  • 组件 getter 方法的 @method 注解(如 getDb(), getCache()
  • 完整的命名空间和类定义

生成 ActiveRecord 模型类型提示

php yii ide-helper/models

这将扫描 ActiveRecord 模型并生成属性和关系类型提示。

生成的内容:

  • 数据库字段的 @property 注解(包含类型和默认值)
  • 关系方法的 @property-read 注解
  • 魔术查询方法的 @method 注解(where*(), orWhere*(), andWhere*()
  • 自定义 ActiveQuery 类的完整实现

生成 PhpStorm Meta 文件

php yii ide-helper/meta

这将生成 .phpstorm.meta.php 文件,为依赖注入容器提供类型推断。

生成的内容:

  • DI 容器绑定(Yii::$container->get() 类型推断)
  • 组件属性映射(Yii::$app->get() 类型提示)
  • ActiveRecord 模式(find(), hasMany(), hasOne() 返回类型)
  • 对象创建模式(Yii::createObject() 类型推断)

查看帮助

php yii help

PhpStorm Meta 文件详解

.phpstorm.meta.php 文件为 PhpStorm 提供高级类型推断能力,以下是它支持的功能:

1. DI 容器类型推断

override(\Yii::$app->get('db'), type(\yii\db\Connection));

这个配置告诉 PhpStorm,Yii::$app->get('db') 的返回类型是 \yii\db\Connection

使用示例:

$db = Yii::$app->get('db');
$result = $db->createCommand('SELECT * FROM users')->queryAll(); // 有完整的类型提示

2. 组件属性类型提示

override(\Yii::$app->db, type(\yii\db\Connection));

这个配置告诉 PhpStorm,Yii::$app->db 属性的类型是 \yii\db\Connection

使用示例:

$result = Yii::$app->db->createCommand('SELECT * FROM users')->queryAll(); // 有完整的类型提示

3. ActiveRecord 查询类型

override(\yii\db\ActiveRecord::find(), type(\yii\db\ActiveQuery));

这个配置告诉 PhpStorm,ActiveRecord::find() 返回 ActiveQuery 类型。

使用示例:

$query = User::find(); // PhpStorm 知道返回的是 ActiveQuery
$query->where(['status' => 1]); // 有完整的类型提示

4. 自定义绑定

你可以在代码中添加自定义绑定:

$generator = new MetaGenerator($config);
$generator->addBinding('custom', ['Custom\Class']);
$generator->save();

配置文件示例:

// console/config/main.php
'components' => [
    'ide-helper' => [
        'class' => 'Chinaphp\Yii2IdeHelper\Config\ConfigProvider',
        'output_dir' => dirname(__DIR__),
        'filename' => '_ide_helper',
        'meta_filename' => '.phpstorm.meta.php',
        'config_paths' => [
            '@app/config/web.php',
            '@app/config/console.php',
        ],
    ],
],

PhpStorm 配置

  1. 在 PhpStorm 中打开项目
  2. 导航到 Settings > PHP > Include paths
  3. 添加 _ide_helper.php 文件路径
  4. 如果有 .phpstorm.meta.php,确保它在项目根目录
  5. 重新索引项目(File > Invalidate Caches / Restart)

生成文件示例

_ide_helper.php

namespace Yii {
    class App {
        public static $app;
    }
}

namespace {
    class Yii extends \Yii\BaseYii {
        /**
         * @var \yii\db\Connection
         */
        public $db;
        
        /**
         * @var \yii\caching\Cache
         */
        public $cache;
    }
}

_ide_helper_models.php

namespace app\models {
    /**
     * @property int $id
     * @property string $title
     * @property-read \app\models\User $user
     * @property-read \app\models\Comment[] $comments
     */
    class Post extends \yii\db\ActiveRecord {
    }
}

.phpstorm.meta.php

<?php
namespace PHPSTORM_META {
    // DI 容器绑定
    override(\Yii::$app->get('db'), type(\yii\db\Connection));
    override(\Yii::$app->db, type(\yii\db\Connection));

    override(\Yii::$app->get('cache'), type(\yii\caching\FileCache));
    override(\Yii::$app->cache, type(\yii\caching\FileCache));

    // ActiveRecord 类型推断
    override(\yii\db\ActiveRecord::find(), type(\yii\db\ActiveQuery));
    override(\yii\db\ActiveRecord::hasMany(), type(\yii\db\ActiveQuery));
    override(\yii\db\ActiveRecord::hasOne(), type(\yii\db\ActiveQuery));
}

Meta 文件优势:

  • ✅ 为 Yii::$app->get() 提供准确的类型推断
  • ✅ 为 Yii::$app->component 属性提供类型提示
  • ✅ 为 ActiveRecord 查询方法提供类型安全
  • ✅ 支持依赖注入容器的类型推断
  • ✅ 增强代码自动补全和重构能力

测试

运行测试套件:

composer test

运行代码规范检查:

composer lint

贡献

欢迎提交 Pull Request!

许可证

MIT License

致谢

本项目灵感来源于 barryvdh/laravel-ide-helper