使用 Laravel Idea 增强 PhpStorm
2024 年 10 月 9 日
介绍
PhpStorm JetBrains 的集成开发环境 (IDE) 是一款出色的 PHP 开发人员工具。它包含大量功能(例如重构和测试工具),可帮助您快速高效地编写代码。
它还支持安装插件,以便您可以扩展其功能并根据您的特定需求定制 IDE。对于 Laravel 开发人员来说,最受欢迎的插件之一(也是我个人最喜欢的插件之一)是 Laravel 理念 。
在本文中,我们将了解 Laravel Idea 是什么以及它提供的我最喜欢的功能。
什么是 Laravel Idea?
Laravel Idea 是 PhpStorm 的一个插件,它为 Laravel 开发人员添加了一些非常方便的功能。
我已经用了好几年了,非常喜欢它。事实上,每当我买一台新笔记本电脑时,它都是我最先安装的东西之一,所以我强烈推荐它。
我喜欢它的一个原因是它与 PhpStorm 无缝集成。感觉它就像是 PhpStorm 本身的一部分,而不是一个单独的插件,所以它非常适合我的工作流程。它融合得如此之好,以至于我经常忘记我正在使用的某个特定功能是 PhpStorm 的原生功能还是 Laravel Idea 的一部分。
Laravel Idea 价格是多少?
在撰写本文时,Laravel Idea 提供了两个单独的计划:“个人”和“组织”。
如果您选择按月付款,个人计划第一年每月费用为 4.90 美元,第二年每月费用为 3.90 美元,第三年及以后每月费用为 2.90 美元。但是,如果您选择按年付款,这些价格会更低。
如果您还不确定是否要使用该插件,还可以免费试用 30 天。老实说,我敢打赌,您会非常喜欢它,试用期结束后您还会继续使用它!使用过它提供的功能后,您会觉得没有它您就失去了一条腿(至少我是这么觉得的)。
由于它是一种相对于其所提供的生产力而言相对便宜的工具,因此它也可能会很容易地被你的老板(或任何掌握财政大权的人)接受。
如何安装 Laravel Idea
开始使用 Laravel Idea 非常简单。
您可以直接从 PhpStorm 安装它。您只需要:
- 打开 PhpStorm
- 进入“设置”菜单
- 点击“插件”
- 搜索“Laravel Idea”
- 点击“安装”
就这样!现在应该已经安装完毕并可以开始使用了。
要检查是否已安装,您可以查看顶部菜单栏中应有的新“Laravel”菜单项。从此菜单,您可以访问所有 Laravel Idea 功能。
Laravel Idea 的主要功能
Laravel Idea 提供了大量功能,但以下是我最喜欢的一些功能:
改进 PhpStorm 的自动完成功能
到目前为止,Laravel Idea 我最喜欢的功能之一是它为 PhpStorm 提供的改进的自动完成功能。别误会我的意思,PhpStorm 中的自动完成功能已经非常好了,但 Laravel Idea 将其提升到了一个新的水平。
如果你是 Laravel 开发者,你一定知道 Laravel 充满了魔力。例如,有 Eloquent 模型访问器, 立面 、宏、事件和作业调度调用等等。尽管 PhpStorm 已经尽力理解一些更明显的 Laravel 功能,但它往往会错过这些类型的魔法。
在 PhpStorm 中,您可以导航到新的“Laravel”菜单项,然后按“生成辅助代码”。在后台,Laravel Idea 将通过扫描您的 Laravel 应用程序生成辅助代码,包括读取迁移文件和数据库架构。从这里开始,它就可以为 PhpStorm 提供更好的自动完成建议。这是我定期运行的操作(通常在更新依赖项之后,或在创建新迁移之后),以使 PhpStorm 与我的 Laravel 应用程序保持同步。
除此之外,Laravel Idea 还可以为 PhpStorm 提供配置和翻译键的自动完成建议, 路线名称 、视图名称、表单请求字段等等。
例如,假设您有以下表单请求:
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreUserRequest extends FormRequest
{
// ...
public function rules(): array
{
return [
'email' => ['string', 'required', 'email'],
'name' => ['string', 'required'],
];
}
}
然后假设您想在控制器中使用此表单请求,如下所示:
namespace App\Http\Controllers;
use App\Http\Requests\StoreUserRequest;
use App\Models\User;
class UserController
{
public function store(StoreUserRequest $request)
{
$email = $request->validated('email');
// ...
}
}
使用如下代码时
$request->validated()
和
$request->safe()
,Laravel Idea 将为表单请求中可用的字段提供自动完成建议。例如,输入
$request->validated('e')
会建议
$request->validated('email')
为您提供。这是一个非常方便的功能,可以为您节省大量时间并减少输入错误的几率。以下是此示例:
代码生成
Laravel Idea 提供的另一个非常方便的功能是能够轻松生成类和文件。
您可以导航到“Laravel”菜单项,然后单击“代码生成”,也可以使用键盘快捷键(
Cmd
+
Shift
+
,
)打开代码生成对话框。从这里,您可以开始输入要生成的内容。例如,您可以输入“cont”,插件将建议“创建控制器”和“创建资源控制器”。您可以选择其中一个并按
Enter
生成代码。它将自动创建并打开文件,无需您离开键盘。
代码生成对话框如下所示:
在撰写本文时,有 34 种不同文件的选项,包括:
- 控制器
- 表单请求
- 雄辩的模型演员表
- 服务提供商
- 等等。
在生成每个文件时,Laravel Idea 都会为您提供适用于您正在创建的文件的附加选项。例如,在生成数据库迁移时,您将获得以下选项:
- 迁移文件名
- 迁移是否应创建表或更改表
- 表名称
- 迁移是否应匿名
- 是否从迁移中省略“down”方法
提交表单后,它将自动为您生成数据库迁移文件。数据库迁移表单如下所示:
如果我们提交此表单,Laravel Idea 将生成一个新的迁移文件(在
database/migrations
目录)看起来像这样:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
public function up(): void
{
Schema::create('articles', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('articles');
}
};
生成 Eloquent 模型
我喜欢的一种特定类型的类生成(并且觉得需要在本文中单独介绍一下,因为我太喜欢它了!),就是能够生成 Eloquent 模型 。
Laravel Idea 为您提供了一个几乎增强您创建模型能力的表单。它不仅允许您轻松创建模型类本身,还可以同时自动创建其他几个相关文件并预填充其中一些。
您可以通过导航到“Laravel”菜单项然后单击“New Eloquent Model”来打开生成器。
表单示例如下:
正如我们在图片中看到的,它让你能够定义模型名称、表名称以及你需要的所有字段。添加字段时,你可以选择它们的数据类型(例如字符串、布尔值、整数等),还可以指定它们是否可空。你还可以定义关系字段(例如
user_id
和
team_id
在我们上面的例子中)。 Laravel Idea 会自动为你建议相关的模型类,并且还会将关系方法添加到模型中。
该表单还为我们提供了使模型可软删除的功能,这将自动添加
deleted_at
字段到新的数据库表并注册
Illuminate\Database\Eloquent\SoftDeletes
模型本身的特征。
除了模型之外,我们还可以通过这种形式自动生成以下相关类:
- 数据库迁移以创建表
- 数据库工厂
- JSON 资源(用于 API)
- 控制器
- 表单请求
- 政策
根据屏幕截图中的表单,我们选择创建模型、迁移、策略和控制器。让我们看看这些生成的文件可能是什么样子,从模型开始:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Article extends Model
{
protected function casts(): array
{
return [
'published_at' => 'timestamp',
];
}
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
public function team(): BelongsTo
{
return $this->belongsTo(Team::class);
}
}
在上面的代码示例中,我们可以看到一个新的
App\Models\Article
模型已创建。由于我们添加了关系字段(
user_id
和
team_id
),Laravel Idea 已自动创建
user()
和
team()
方法。它还添加了
published_at
场地。
接下来我们看一下生成的迁移文件:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
public function up(): void
{
Schema::create('articles', function (Blueprint $table) {
$table->id();
$table->string('uuid');
$table->foreignId('user_id');
$table->foreignId('team_id');
$table->string('title');
$table->text('content');
$table->timestamp('published_at');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('articles');
}
};
我们可以看到,迁移文件已创建,其中包含我们在表单中指定的所有字段。您可能想要对此文件进行一些更改,例如添加索引或级联删除。但如果没有,您可以直接运行迁移。
接下来我们看一下生成的策略文件:
namespace App\Policies;
use App\Models\Article;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class ArticlePolicy
{
use HandlesAuthorization;
public function viewAny(User $user): bool
{
}
public function view(User $user, Article $article): bool
{
}
public function create(User $user): bool
{
}
public function update(User $user, Article $article): bool
{
}
public function delete(User $user, Article $article): bool
{
}
public function restore(User $user, Article $article): bool
{
}
public function forceDelete(User $user, Article $article): bool
{
}
}
我们可以看到,该策略具有控制访问所需的所有方法
App\Models\Article
模型。然后,您可以根据需要为每种方法填写逻辑。
最后我们来看一下生成的控制器文件:
namespace App\Http\Controllers;
use App\Models\Article;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
use AuthorizesRequests;
public function index()
{
$this->authorize('viewAny', Article::class);
return Article::all();
}
public function store(Request $request)
{
$this->authorize('create', Article::class);
$data = $request->validate([
'uuid' => ['required'],
'user_id' => ['required', 'exists:users'],
'team_id' => ['required', 'exists:teams'],
'title' => ['required'],
'content' => ['required'],
'published_at' => ['required', 'date'],
]);
return Article::create($data);
}
public function show(Article $article)
{
$this->authorize('view', $article);
return $article;
}
public function update(Request $request, Article $article)
{
$this->authorize('update', $article);
$data = $request->validate([
'uuid' => ['required'],
'user_id' => ['required', 'exists:users'],
'team_id' => ['required', 'exists:teams'],
'title' => ['required'],
'content' => ['required'],
'published_at' => ['required', 'date'],
]);
$article->update($data);
return $article;
}
public function destroy(Article $article)
{
$this->authorize('delete', $article);
$article->delete();
return response()->json();
}
}
API 控制器具有与以下对象交互所需的所有方法:
App\Models\Article
模型,每个方法都有一些基本的授权和验证检查。您可能希望向这些方法添加更多逻辑,但这是一个很好的起点,可以让您免于自己编写所有样板代码。
导航
Laravel Idea 中另一个非常方便的功能是它大大改善了 PhpStorm 中的导航。
大多数 IDE 的标准功能是能够“点击/进入”类名或方法/函数名并转到该类、方法或函数。您可以想象,当您浏览项目并想要查看特定方法的工作原理时,此功能非常有用。
然而,Laravel Idea 更进一步。它为您提供了点击更多内容的能力,而不仅仅是标准类和方法。您还可以点击:
- 配置和翻译键
- 例如:点击
config('app.name')会直接带你到name字段中的config/app.php文件。 - Eloquent 作用域和关联方法
- 例如:点击
posts部分User::whereHas('posts')会带你去posts关系定义为User模型。 - 航线
- 例如:点击
route('dashboard')会带你到路线定义(大概在routes/web.php文件)。 - 控制台命令
- 例如:点击
Artisan::call('migrate')会带你去migrate命令定义在vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php。 - 还有更多
一般的经验规则是,如果 Laravel Idea 可以在您输入时为您自动完成字符串,它就知道该字符串来自哪里并且可以直接带您到该字符串。
能够像这样在代码中跳转比手动搜索所需文件或类要高效得多。这真的可以节省时间!
集成和软件包支持
我最近发现的一个非常酷的功能是 Laravel Idea 与其他软件包和库(例如 Livewire、Inertia、Laravel Nova 和 Filament)的良好集成。
例如,如果您正在创建 Livewire 或 Inertia 组件,Laravel Idea 可以为您提供自动完成建议,并允许您快速跳转代码库。
如果您使用的是 Laravel Nova 或 Filament 之类的东西,您还可以快速生成 Nova 和 Filament 资源类,甚至可以从现有的 Eloquent 模型中生成。您可以选择直接从模型生成这些类,方法是右键单击模型名称(如下图所示),或者通过我们之前讨论过的“创建 Eloquent 模型”模式中出现的新复选框。
结论
在本文中,我们介绍了我最喜欢的一些 Laravel Idea 功能。如您所见,它是 PhpStorm 的一个很好的补充,可以使 IDE 比现在更加强大。
如果你是 Laravel 开发人员,我强烈建议你尝试一下,尤其是因为它有免费试用版。这是一款很棒的工具,可以为你节省大量时间,让你的开发过程更加顺畅。
我是否遗漏了您最喜欢的 Laravel Idea 功能?
帖子 使用 Laravel Idea 增强 PhpStorm 首先出现在 Laravel 新闻 。
加入 Laravel 时事通讯 获取最新信息 类似这样的 Laravel 文章将直接发送到您的收件箱。