使用 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 的主要功能

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 Idea 提供的另一个非常方便的功能是能够轻松生成类和文件。

您可以导航到“Laravel”菜单项,然后单击“代码生成”,也可以使用键盘快捷键( Cmd + Shift + , )打开代码生成对话框。从这里,您可以开始输入要生成的内容。例如,您可以输入“cont”,插件将建议“创建控制器”和“创建资源控制器”。您可以选择其中一个并按 Enter 生成代码。它将自动创建并打开文件,无需您离开键盘。

代码生成对话框如下所示:

使用 Laravel Idea 创建控制器

在撰写本文时,有 34 种不同文件的选项,包括:

  • 控制器
  • 表单请求
  • 雄辩的模型演员表
  • 服务提供商
  • 等等。

在生成每个文件时,Laravel Idea 都会为您提供适用于您正在创建的文件的附加选项。例如,在生成数据库迁移时,您将获得以下选项:

  • 迁移文件名
  • 迁移是否应创建表或更改表
  • 表名称
  • 迁移是否应匿名
  • 是否从迁移中省略“down”方法

提交表单后,它将自动为您生成数据库迁移文件。数据库迁移表单如下所示:

使用 Laravel Idea 创建迁移类

如果我们提交此表单,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”来打开生成器。

表单示例如下:

使用 Laravel Idea 生成 Eloquent 模型

正如我们在图片中看到的,它让你能够定义模型名称、表名称以及你需要的所有字段。添加字段时,你可以选择它们的数据类型(例如字符串、布尔值、整数等),还可以指定它们是否可空。你还可以定义关系字段(例如 user_idteam_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_idteam_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 生成资源

结论

在本文中,我们介绍了我最喜欢的一些 Laravel Idea 功能。如您所见,它是 PhpStorm 的一个很好的补充,可以使 IDE 比现在更加强大。

如果你是 Laravel 开发人员,我强烈建议你尝试一下,尤其是因为它有免费试用版。这是一款很棒的工具,可以为你节省大量时间,让你的开发过程更加顺畅。

我是否遗漏了您最喜欢的 Laravel Idea 功能?


帖子 使用 Laravel Idea 增强 PhpStorm 首先出现在 Laravel 新闻

加入 Laravel 时事通讯 获取最新信息 类似这样的 Laravel 文章将直接发送到您的收件箱。