iiifx-production / yii2-autocomplete-helper
Yii2 自动完成助手
Requires
- php: ^8.0
- yiisoft/yii2: ^2.0.36
Requires (Dev)
- phpunit/phpunit: ^9
- roave/security-advisories: dev-latest
This package is not auto-updated.
Last update: 2024-09-16 22:57:25 UTC
README
为 Yii2 中的自定义组件生成自动完成。
[英文文档] [俄语文档]
默认情况下,Yii2 中自定义组件的自动完成功能不工作。IDE 看不到添加的组件,这会给操作带来不便。
此扩展允许您自动生成一个包含自动完成 PHPDoc 块的文件,IDE 将使用该文件识别应用配置中的所有组件。
安装
使用 Composer
composer require "iiifx-production/yii2-autocomplete-helper"
配置
安装后,您需要一次性设置组件以使其工作。
对于 Yii2 Basic,在 @app/config/console.php
'bootstrap' => ['log', 'autocomplete'], 'components' => [ 'autocomplete' => [ 'class' => 'iiifx\Yii2\Autocomplete\Component', ], # ... ]
对于 Yii2 Advanced,在 @console/config/main.php
'bootstrap' => ['log', 'autocomplete'], 'components' => [ 'autocomplete' => [ 'class' => 'iiifx\Yii2\Autocomplete\Component', ], # ... ]
使用
在控制台生成自动完成
php yii ide-components
生成器会自动检测应用类型,读取所有配置文件,并将自动完成文件生成到应用根目录。
Yii2 IDE auto-completion helper Vitaliy IIIFX Khomenko, 2019 Success: /home/iiifx/Projects/myProject/_ide_components.php
重要:为了让 IDE 不混淆两个 Yii 类,必须将主要的 Yii 类文件标记为文本文件 - 示例。主要类位于路径:@vendor/yiisoft/yii2/Yii.php
高级定制
有时应用的结构与标准不同,需要更改生成器的行为。
以下是一些可能的配置选项示例。
更改组件名称
如果您需要将 自动完成 名称更改为另一个名称,这很简单
'bootstrap' => ['log', 'new-component-name'], # <-- new component name 'components' => [ 'new-component-name' => [ # <-- new component name 'class' => 'iiifx\Yii2\Autocomplete\Component', ], # ... ]
当生成器在控制台运行时,您需要传递正确的组件名称
php yii ide-components --component=new-component-name
更改环境
默认情况下,只有在 YII_ENV = "dev" 环境下才能启动生成器。
您可以更改环境
'bootstrap' => ['log', 'autocomplete'], 'components' => [ 'autocomplete' => [ 'class' => 'iiifx\Yii2\Autocomplete\Component', 'environment' => 'local', # <-- environment ], # ... ]
更改生成器控制器
默认情况下,生成器使用控制台控制器来创建自动完成。
您可以替换默认控制器,扩展它,或添加您自己的实现
'bootstrap' => ['log', 'autocomplete'], 'components' => [ 'autocomplete' => [ 'class' => 'iiifx\Yii2\Autocomplete\Component', 'controllerMap' => [ 'ide-components' => 'iiifx\Yii2\Autocomplete\Controller', # <-- default controller 'my-custom-generator' => 'path\to\your\custom\Controller', # <-- your controller ], ], # ... ]
现在您可以运行您的控制器
php yii my-custom-generator
默认控制器的链接:source/Controller.php。
更改自动完成文件
默认情况下,自动完成文件的名称为 _ide_components.php,并将放置在应用根目录。
您可以更改文件名称和位置
'bootstrap' => ['log', 'autocomplete'], 'components' => [ 'autocomplete' => [ 'class' => 'iiifx\Yii2\Autocomplete\Component', 'result' => '@app/new-file-name.php' # <-- name and path ], # ... ]
文件路径必须是框架别名的相对路径。示例:@common/../new-file-name.php。
特殊配置文件
有时需要手动指定要从中生成自动完成的配置文件。
在这种情况下,生成器不会搜索配置,而是直接使用此列表。
对于 Yii2 Advanced
'bootstrap' => ['log', 'autocomplete'], 'components' => [ 'autocomplete' => [ 'class' => 'iiifx\Yii2\Autocomplete\Component', 'config' => [ '@common/config/main.php', # <-- config list '@common/config/main-local.php', '@console/config/main.php', '@console/config/main-local.php', '@backend/config/main.php', '@backend/config/main-local.php', '@frontend/config/main.php', '@frontend/config/main-local.php', ], ], # ... ]
对于 Yii2 Basic
'bootstrap' => ['log', 'autocomplete'], 'components' => [ 'autocomplete' => [ 'class' => 'iiifx\Yii2\Autocomplete\Component', 'config' => [ '@app/config/console.php', # <-- config list '@app/config/web.php', ], ], # ... ]
配置分组
在大项目中,有时需要根据开发阶段生成不同的自动完成文件。
您可以分组配置文件,并只为特定组生成自动完成。
'bootstrap' => ['log', 'autocomplete'], 'components' => [ 'autocomplete' => [ 'class' => 'iiifx\Yii2\Autocomplete\Component', 'config' => [ 'frontend' => [ '@common/config/main.php', # <-- frontend group '@common/config/main-local.php', '@frontend/config/main.php', '@frontend/config/main-local.php', ], 'backend' => [ '@common/config/main.php', # <-- backend group '@common/config/main-local.php', '@backend/config/main.php', '@backend/config/main-local.php', ], 'api' => [ '@common/config/main.php', # <-- api group '@common/config/main-local.php', '@common/../api/config/main.php', '@common/../api/config/main-local.php', ], ], ], # ... ]
现在您可以生成所需组的自动完成
php yii ide-components --config=api
配置应用类
某些项目有时可以使用覆盖的应用类进行 Web 和控制台。
您可以通过配置中的适当设置来完成此操作。
'bootstrap' => ['log', 'autocomplete'], 'components' => [ 'autocomplete' => [ 'class' => 'iiifx\Yii2\Autocomplete\Component', 'webAppClass' => '\full\namespace\to\WebApplicationClass', 'consoleAppClass' => '\full\namespace\to\ConsoleApplicationClass', ], # ... ]