好久没用 Laravel 和 PHPStorm 了,最近开发了小项目,用的时候发现 Laravel 的 Facades 是没有代码补全提示的,原因是 Facades 是基于 静态方法重载 __callStatic() 实现的。

找了个工具,可以实现 Facades 的代码补全。

代码补全

安装

生成

基本原理

代码补全

使用插件 barryvdh/laravel-ide-helper 可以让 PHPStorm 支持 Laravel 的代码补全。插件的 GitHub 地址是: https://github.com/barryvdh/laravel-ide-helper。

使用起来很简单,过程如下:

安装

1composer require --dev barryvdh/laravel-ide-helper

生成

1php artisan ide-helper:generate

执行生成后,会在项目目录生成 _ide_helper.php 文件,表示安装生成成功。

之后在 PHPStorm 中就可以使用 Facades 的代码补全了,效果如下图:

基本原理

在 Laravel 中 Facades 的使用静态方法重载实现的,Facade 基类使用了__callStatic() 魔术方法,直到对象从容器中被解析出来后,才会进行调用。由于此,所以 IDE 的代码补全工具不能解析出来此静态方法的调用。例如 DB::table()->insert() 。

插件形成了一个助手文件,将项目中的 Facades 的方法,具体实现了一份,没有实现具体功能,仅仅是实现了结构部分,例如属于哪个 Facades ,有哪些参数,返回值类型等。这样就告知了 IDE 使用那些内容补全代码!参考生成的助手文件 _ide_helper.php 的部分代码:

 1namespace IlluminateSupportFacades {  2 class DB { 3 /** 4 * Run an insert statement against the database. 5 * 6 * @param string $query 7 * @param array $bindings 8 * @return bool  9 * @static 10 */ 11 public static function insert($query, $bindings = array())12 {13 //Method inherited from IlluminateDatabaseConnection 14 /** @var IlluminateDatabaseMySqlConnection $instance */15 return $instance->insert($query, $bindings);16 }17 }18}19namespace { 20 class DB extends IlluminateSupportFacadesDB {}21}

上面的代码可知道,模拟了类 DB,并模拟的静态方法 insert,通过规范化的注释,得到 PHPDoc,从而实现 IDE 的代码提示功能。

代码提示_PHPStorm 支持 Laravel Facades 的代码提示相关推荐

  1. 计算机u盘设备无法启动不了,系统提示“该设备无法启动(代码:10)”,USB设备不能开始工作怎么办?...

    陈宏斌   2019-6-20 高级软件工程师 概要 电脑的USB设备带有黄色感叹号,提示"该设备无法启动.(代码10)",导致USB设备不能正常开始工作.如果您有遇到过这个问题, ...

  2. 手机抽奖页面代码html,html5大转盘抽奖支持手机转盘抽奖代码

    特效描述:html5 大转盘抽奖 支持手机 转盘抽奖代码.html5转盘,html5抽奖,手机转盘,手机抽奖,手机转盘抽奖,可配置奖品抽奖. 代码结构 1. 引入CSS 2. 引入JS 3. HTML ...

  3. 电脑提示vcomp140.dll无法继续执行代码

    电脑提示vcomp140.dll无法继续执行代码怎么办?vcomp140.dll是电脑系统系统重要的动态链接库文件,丢失或者损坏的话,会导致电脑很多软件跟游戏无法打开运行.需要怎么修复?详细困扰着不少 ...

  4. MyEclipse提示键配置、提示快捷键、提示背景色、关键字颜色、代码显示

    1.提示键配置 一般默认情况下,Eclipse ,MyEclipse 的代码提示功能是比Microsoft Visual Studio的差很多的 ,主要是Eclipse ,MyEclipse本身有很多 ...

  5. EV代码签名证书,支持Windows 10预览版和正式版驱动签名

    DigiCert EV代码签名证书具有普通内核代码签名证书的所有功能,但不同的是采用更加严格国际标准扩展验证(EV验证),并且有严格的证书私钥保护机制--必须采用 USB Key来保护签名证书的私钥, ...

  6. Eclipse.自动提示--编写HTML/CSS/JS/JSP代码时自动提示的解决办法

    最近在做一个javaweb的项目,在eclipse中编写jsp代码时没有代码提示这个梗让人很头疼,之前一直写Java代码或者在Dreamweaver中写HTML代码时自动提示代码用起来特别爽,这突然间 ...

  7. 远程开发 代码提示_VS Code 远程开发和代码评审实践

    很多年前的一天,我在 TypeScript 仓库下创建了一个 issue:微软打算拿 Monaco 来干嘛?接着第二天微软就发布了 VS Code.这个巧合我吹了五年还孜孜不倦. 因为已经用上了 Ty ...

  8. Haroopad Markdown 编辑器代码语法高亮支持

    代码语法高亮 支持的语言和缩写标记 参考 代码语法高亮 书写格式为: ` ` ` language_key if (condition){ return true } ` ` ` 在 ` ` ` (三 ...

  9. 声音驱动提示不完整或已损坏 (代码 19)

    声音驱动提示不完整或已损坏 (代码 19) 参考网址:https://jingyan.baidu.com/article/200957610f5f8ccb0721b4a7.html 声卡驱动不正常,提 ...

最新文章

  1. Matlab与线性代数 -- 正态分布的随机矩阵
  2. 浅谈WebSocket
  3. 基于OpenCV的膨胀和腐蚀
  4. 【Android QR Code】开源项目:ZXing(一)导入项目
  5. erlang在mac上安装
  6. 常用校验算法CRC、MD5、SHA_转
  7. 2、开关灯、选项卡、隔行换色
  8. 使用com.alibaba.druid.filter.config.ConfigTools进行加密和解密工具类
  9. Idea中 webservice 的调用
  10. 喝杯java冷静一下是什么梗_大哥喝冰阔落是什么梗 喝冰阔落的出处在哪
  11. bootloader系列二——arm920t--bootloader架构设计
  12. Substance Painter 创建头发实验
  13. VS中给qt按钮添加图标
  14. 这五款小众软件你肯定不知道
  15. 饥荒模块显示检查工作室订阅服务器,饥荒工作室新作《欺诈之地》正式上架Steam商店...
  16. krpano plugin interface
  17. 关于redis 小白从入门到大神
  18. 完美解决 手机软键盘遮挡问题
  19. 一招解决matplot绘图中文无法显示的问题
  20. html自动获取当前日期,javascript怎么获取当前日期?

热门文章

  1. python装饰器原理-python装饰器原理与用法深入详解
  2. python掌握程度怎么判断-想要学习人工智能需要掌握Python到什么程度
  3. python3.7.2教程-centos7系统下python2与python3共存
  4. python财务报表分析-用Python爬取东方财富网上市公司财务报表
  5. 线上学python哪家好-Python线上和线下培训哪个好?老男孩Python
  6. react源码学习笔记
  7. 设计模式之AbstractFactory
  8. Quartz学习笔记
  9. 牛客网 PAT乙级(Basic Level)练习题 1023 考新郎
  10. IGMP Internet组管理协议 未完