一言不合!我写了一个 PHPStorm 的插件

长期以来,我都使用 PHPStorm + Vim 来写代码,这两者结合让我写代码非常的流畅,心情也会很好。但是,始终有一个痛点没办法解决,那就是创建文件很慢,特别是创建大量的文件。为此,我专门写了一个 PHPStorm 的插件来解决这个痛点。

一言不合!写了一个 PHPStorm 的插件

你在插件市场不一定能搜得到,新的版本今天才发布。

关于创建文件

如果你在 Laravel 中,是通过一个 Controller 写所有的业务逻辑,并且使用 Db 这样的门面类从头写到尾,那么创建文件可能并不是问题。

但是如果你在项目中,遵循分层原则,比如:

Controller -> Service -> Logic -> Repository -> Model ….

那么恭喜你,和我一样,创建文件会占据你大量的时间。这也是我之前写 Java 感到不爽的事情,一个小功能,每次都要更改十几个甚至几十个代码文件。

写一个插件来创建文件

先来看看最终实现的效果,在 PHPStorm 使用快捷键 Ctrl + Shift + Z,会弹出目录选择弹窗,你选择一个目录:

一言不合!我写了一个 PHPStorm 的插件

选择目录之后,会出现一个小弹窗,让你选择代码模板:

一言不合!我写了一个 PHPStorm 的插件

代码模板是哪里来的呢?插件会扫描,代码根目录下的 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;

}

你可能发现了,它支持基本的一些变量替换,会自动替换命名空间和类名,这些根据文件路径就能推断出来。然后文件就创建好了,在实际上,创建文件这个动作完全不需要操作鼠标,解决了一些痛点:

  1. 不需要通过左侧目录树去选择目录,而是通过快捷键的弹窗直接选择
  2. 自定义模板,基础的变量替换,之后有空可以写一下自定义变量替换

如何写一个 PHPStorm 的插件

如何写一个 PHPStorm 的插件,其实我也不知道。

首先你要了解 Java 的基本语法,目前没有第二种语言可以选择,IDE 的插件本质上就是一个 Jar 包。

在写这个插件之前,我也从来没写过。这个插件的所有代码都是通过 ChatGPT 来生成的,我一行也没写,顶多就是负责代码的搬运。

所以,我不准备在这里写插件如何编写,如果你有兴趣,可以看我的源码 Github 传送,或者问 AI。

我觉得如果 AI 用的好,学一门新的技术是一件比较容易的事情。 想想从前没有 AI 的日子里,众里寻她千百度,蓦然回首,百度是一个骗子。

总结

  1. 觉得不爽,就想办法去改变。代码不爽,就重构。IDE 不爽,装插件,没有合适的插件,写插件。
  2. 用好 AI,用好 AI,用好 AI。
  3. 欢迎关注我的开源项目 Github: Laravel Plus, 其实这个插件一开始就是为了这个开源项目编写的。
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 16

对于这类需求,我一般都是用 PHP + Symfony/Console 写脚本,然后调用


这里解决了一个 PHPStorm 的痛点,你也可以在 PHPStorm 中创建模板,但是模板不能在团队中共享,这里把代码模板加入到了代码的版本控制中。

这个不对哈,phpstorm 在创建的 file template 的时候, Scheme 如果选择了 Project ,那就是保存在 .idea/fileTemplates 目录下的,你把这个目录纳入到版本管理里面就好了。

另外,.idea 目录下,除了部分文件以外,都是可以纳入到版本管理系统中进行共享的,见:What is the .idea folder? – Rider Support | JetBrains

另可参考:

2个月前 评论
Rache1 (作者) 2个月前
苏近之 (楼主) 2个月前
苏近之 (楼主) 2个月前
苏近之 (楼主) 2个月前

可以选择 ctrl c ctrl v

2个月前 评论
苏近之 (楼主) 2个月前

以前我代码的设计是controller / service / repository / model分层设计,这样的设计,冗余太多了,后面我想到了trait, 用组合设计去改变现有链路设计,现在已调整为controller / service + trait / model分层设计。

2个月前 评论
苏近之 (楼主) 2个月前
苏近之 (楼主) 2个月前
lun1bz 2个月前
苏近之 (楼主) 2个月前

10行代码能写什么东西?特么 { } 都占了几行了

2个月前 评论
苏近之 (楼主) 2个月前
苏近之 (楼主) 2个月前
苏近之 (楼主) 2个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!