一言不合!我写了一个 PHPStorm 的插件
长期以来,我都使用 PHPStorm + Vim 来写代码,这两者结合让我写代码非常的流畅,心情也会很好。但是,始终有一个痛点没办法解决,那就是创建文件很慢,特别是创建大量的文件。为此,我专门写了一个 PHPStorm 的插件来解决这个痛点。
你在插件市场不一定能搜得到,新的版本今天才发布。
关于创建文件
如果你在 Laravel 中,是通过一个 Controller 写所有的业务逻辑,并且使用 Db 这样的门面类从头写到尾,那么创建文件可能并不是问题。
但是如果你在项目中,遵循分层原则,比如:
Controller -> Service -> Logic -> Repository -> Model ….
那么恭喜你,和我一样,创建文件会占据你大量的时间。这也是我之前写 Java 感到不爽的事情,一个小功能,每次都要更改十几个甚至几十个代码文件。
写一个插件来创建文件
先来看看最终实现的效果,在 PHPStorm 使用快捷键 Ctrl + Shift + Z
,会弹出目录选择弹窗,你选择一个目录:
选择目录之后,会出现一个小弹窗,让你选择代码模板:
代码模板是哪里来的呢?插件会扫描,代码根目录下的 templates
目录中 *.tpl
结尾的模板文件。
这里解决了一个 PHPStorm 的痛点,你也可以在 PHPStorm 中创建模板,但是模板不能在团队中共享,这里把代码模板加入到了代码的版本控制中。
比如 Controller 的代码模板如下:
<?php
/** @noinspection PhpUnhandledExceptionInspection */
declare(strict_types=1);
namespace ${NAMESPACE};
use App\Http\Controllers\Controller;
use Zenith\LaravelPlus\Attributes\Autowired;
use Zenith\LaravelPlus\Attributes\Routes\Prefix;
#[Prefix(path: '')]
class ${NAME} extends Controller
{
#[Autowired]
private $service;
}
你可能发现了,它支持基本的一些变量替换,会自动替换命名空间和类名,这些根据文件路径就能推断出来。然后文件就创建好了,在实际上,创建文件这个动作完全不需要操作鼠标,解决了一些痛点:
- 不需要通过左侧目录树去选择目录,而是通过快捷键的弹窗直接选择
- 自定义模板,基础的变量替换,之后有空可以写一下自定义变量替换
如何写一个 PHPStorm 的插件
如何写一个 PHPStorm 的插件,其实我也不知道。
首先你要了解 Java 的基本语法,目前没有第二种语言可以选择,IDE 的插件本质上就是一个 Jar 包。
在写这个插件之前,我也从来没写过。这个插件的所有代码都是通过 ChatGPT 来生成的,我一行也没写,顶多就是负责代码的搬运。
所以,我不准备在这里写插件如何编写,如果你有兴趣,可以看我的源码 Github 传送,或者问 AI。
我觉得如果 AI 用的好,学一门新的技术是一件比较容易的事情。 想想从前没有 AI 的日子里,众里寻她千百度,蓦然回首,百度是一个骗子。
总结
- 觉得不爽,就想办法去改变。代码不爽,就重构。IDE 不爽,装插件,没有合适的插件,写插件。
- 用好 AI,用好 AI,用好 AI。
- 欢迎关注我的开源项目 Github: Laravel Plus, 其实这个插件一开始就是为了这个开源项目编写的。
本作品采用《CC 协议》,转载必须注明作者和本文链接
对于这类需求,我一般都是用 PHP + Symfony/Console 写脚本,然后调用
这个不对哈,phpstorm 在创建的 file template 的时候, Scheme 如果选择了 Project ,那就是保存在
.idea/fileTemplates
目录下的,你把这个目录纳入到版本管理里面就好了。另外,.idea 目录下,除了部分文件以外,都是可以纳入到版本管理系统中进行共享的,见:What is the .idea folder? – Rider Support | JetBrains
另可参考:
可以选择 ctrl c ctrl v
以前我代码的设计是
controller / service / repository / model
分层设计,这样的设计,冗余太多了,后面我想到了trait
, 用组合设计去改变现有链路设计,现在已调整为controller / service + trait / model
分层设计。10行代码能写什么东西?特么 { } 都占了几行了