添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

lumen或laravel项目的开发,在使用phpstorm时都会遇到头疼的问题:IDE能自动补全Eloquent ORM查询构建器的链式查询,且必须使用query()来生成查询构建器对象。而参考官网文档直接使用Eloquent对象时,却不能自动补全。

还有经常使用到的Facade相关的静态方法 ,IDE也是无法识别到的,想要调用这些静态函数名称,就必须查文档,严重降低编码效率和影响心情。

本文中的代码适用于:php7.4.*、laravel6.*、mysql5.6的开发环境。

composer.json的3个注意事项

1、首先在composer.json中指定require第一项为php的版本号,也就是知名了当前程序运行环境中的php版本。

2、在选在包版本时,先到 Packagist 找到对应包,检查依赖说明,是否满足。

3、composer.lock需要加入版本管理库,才能保证开发环境与正式环境的依赖包一致。

如何使用ide-helper

Laravel ide-helper 是一个不错的代码提示及补全工具,可以为编码带来很大便利。也就是能解决Facade静态调用不能自动补全(魔术方法),也能支持通过Eloquent访问model的属性、魔术方法(比如whereId())。

安装 laravel-ide-helper

composer require-dev barryvdh/laravel-ide-helper:2.8.2

也可以在composer.json中 require-dev 新增:

"barryvdh/laravel-ide-helper": "~2.8",

然后在 composer update 时,会自动安装 Laravel IDE Helper

注:因为 barryvdh/laravel-ide-helper - Packagist - v2.8.2 的依赖项 illuminate/console 在2.8.2的版本允许 ^6 || ^7 || ^8的illuminate,但2.9以上的版本要求^8,也就是至少laravel框架要求>8.*。

其中 illuminate 指的就是laravel的框架版本。

安装 doctrine/dbal

model注解字段(表栏位)的时候会用到。

composer require-dev doctrine/dbal: 2.12.0

composer.json:

"doctrine/dbal": "^2.12.0",

config/app.phpproviders 数组中加入

Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class

如果你只在开发环境中安装 larave-ide-helper,那么可以在 app/Providers/AppServiceProvider.phpregister 方法中写入下面代码:

public function register()
    if ($this->app->environment() !== 'production') {
        $this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
    // ...

如果是lumen的话,可以在bootstrap中加入:

$env = env('APP_ENV');
if ($env !== 'production') { // 非生产环境,额外注册的服务
    $app->configure('ide-helper');
    $app->register(Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);

注意,在项目上线时候,要将项目环境改为 production.

为Facades 生成注释

php artisan ide-helper:generate  

在根目录生成 _ide_helper.php 文件。(可以在config/ide-helper.php中修改文件名称)

为model生成注释

ide可自动完成数据库表字段名称与类型定义,一次性同步所有model:

php artisan ide-helper:models  

如果数据库表有改动,需要同步更新指定model:

php artisan ide-helper:models App\Models\Test\Master\TestAccount -R

注1:-R表示reset,删除已有的phpdoc,重新生成。具体可以通过 php artisan ide-helper:models -h 查看具体使用

注2App\Models\Test\Master\TestAccount 指定具体要更新的model,虽然help和readme文档说model名,其实是要完整具体的model类全名。

生成 PhpStorm Meta file

php artisan ide-helper:meta  

在根目录生成 .phpstorm.meta.php 文件

关于mongoDB模型

如果使用jenssegers/mongodb(A MongoDB based Eloquent model and Query builder for Laravel (Moloquent))

ide-helper并不能很好的处理mongodb的模型注解,因为mongodb不是松散的nosql的db,所以ide-helper难以识别除字段与对应where、with的魔术方法,其实也不需要。

所以,可以在ide-helper:models时,忽略mongodb的model类,如下:

php artisan ide-helper:models --ignore=App\Models\MongoDB\*

或者在config/ide-helper.php配置中补充:

|-------------------------------------------------------------------------- | Models to ignore |-------------------------------------------------------------------------- | Define which models should be ignored. | php artisan ide-helper:models --ignore="App\Models\Post,App\Models\User" 'ignored_models' => [ App\Models\MongoModels\Model1::class, App\Models\MongoModels\Model2::class,

是否需要ide-helper

ide-helper可以帮助我们自动生成一些代码。

由于php不是强类型,甚至php7之后,也还不算完全强类型,所以model通常没有定义model的数据结构,导致外部在访问model的数据时,也都是通过__maigc相关魔术方法实现,也导致在编码层面不方便获取field及及其类型。

如果有需要强类型定义model属性(数据库表栏位),还想使用model提供的那些wherexxx查询的魔术方法,那我们就定期使用ide-helper更新所有model的注解。

这个插件是代码侵入式的,是一个开发协助工具,不是我们正式发布需要的插件。

barryvdh/laravel-ide-helper: Laravel IDE Helper - install