GitHub Copilot CURD 提高了效率但也存在问题

作者: 温新

分类: 【Laravel】

阅读: 1222

时间: 2023-04-02 07:58:20

hi,我是温新,一名 PHPer

这篇文章使用 GitHub Copilot 进行 CURD,通过 CURD 来看看它怎么样。

GitHub Copilot CURD 体会

在这个 CURD 的案例中,我使用了 posts 进行简单的 CURD 测试。在测试过程中发现了如下几个问题:

1、使用 GitHub Copilot 需要对自己做的事了然于心且要表达出来(也就是告诉 GitHub Copilot 我要做什么);

2、对于简单页面 CURD ,它真的很高效;

3、GitHub Copilot 输出的并不是我们想要的。对于这个输出错乱的问题,处理不好可能就会把自己坑了;

4、要使用好 GitHub Copilot,我们还需要不断的学习。

不写一行代码使用 Post CURD

database\migrations\2023_04_02_062452_create_posts_table.php

<?php

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('posts', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('body');
            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('posts');
    }
};

routes\web.php

// posts resource
Route::resource('posts', \App\Http\Controllers\PostController::class);

app\Http\Controllers\PostController.php

<?php

namespace App\Http\Controllers;

use App\Models\Post;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;

class PostController extends Controller
{
    // index
    public function index()
    {
        // posts, 按时间倒序排列,每页 10 条数据,并在视图显示
        $posts = Post::latest()->paginate(10);

        return view('posts.index', compact('posts'));
    }

    // create
    public function create(): View
    {
        return view('posts.create');
    }

    // store
    public function store(Request $request)
    {
        return redirect()->route('posts.index');
    }

    // show
    public function show(Post $post): View
    {
        return view('posts.show', compact('post'));
    }

    // 编辑 post
    public function edit(Post $post)
    {
        return view('posts.edit', compact('post'));
    }

    // 更新文章
    public function update(Request $request, Post $post): RedirectResponse
    {
        $post->update($request->all());

        return redirect()->route('posts.show', $post);
    }

    // 删除文章
    public function destroy(Post $post): RedirectResponse
    {
        $post->delete();

        return redirect()->route('posts.index');
    }
}

resources\views\posts\index.blade.php

<!-- 继承app模板 -->
@extends('app')

<!-- 填充 content 内容 -->
@section('content')
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header">Posts</div>

                    <div class="card-body">
                        @foreach($posts as $post)
                            <div class="card mb-3">
                                <div class="card-header">
                                    {{ $post->id }}
                                    {{ $post->title }}
                                </div>
                                <div class="card-body">
                                    <p class="card-text">{{ Str::limit($post->body, 50) }}</p>
                                    <a href="{{ route('posts.show', ['post' => $post->id]) }}" class="btn btn-primary">Read More</a>
                                    <a href="{{ route('posts.edit', ['post' => $post->id]) }}" class="btn btn-primary">Edit</a>
                                    <form action="{{ route('posts.destroy', ['post' => $post->id]) }}" method="POST" style="display: inline;">
                                        @csrf
                                        @method('DELETE')
                                        <button type="submit" class="btn btn-danger">Delete</button>
                                    </form>

                                </div>
                            </div>
                        @endforeach
                    </div>
                </div>
            </div>
        </div>
    </div>

    <!-- 显示分页 -->
    <div class="d-flex justify-content-center">
        {{ $posts->links() }}
    </div>
@endsection

其他的视图界面就不列表出来了,没有多大意义。

简单的页面使用 GitHub Copilot 完全可以实现一行代码都不写。对于复杂的业务现在未测试,暂不知晓情况。

请登录后再评论