Kustomisasi Stub Di Laravel - CRUDPRO

Kustomisasi Stub Di Laravel

Dalam posting ini, saya akan menunjukkan cara menyesuaikan stub yang digunakan untuk menghasilkan kelas yang berbeda diaplikasi Anda. Ada sedikit ketidaknyamanan, tetapi menyesuaikan secara manual setiap kelas yang dihasilkan bisa jadi membosankan. Laravel menyediakan cara bagi pengembang untuk menerbitkan dan mematikan versi dalam aplikasi mereka jika mereka ingin menyesuaikan kelas yang dihasilkan dengan selera khusus mereka.

Jika Anda ingin mengikuti, Anda dapat menggunakan installer Laravel untuk membuat proyek Laravel baru menggunakan Sail atau cara lain untuk membuat aplikasi baru.
 
laravel new stub-demo --git

Dengan asumsi Anda memiliki versi git minimum yang diperlukan, Anda mungkin telah memperhatikan bahwa installer Laravel sekarang mendukung integrasi Git dan GitHub. Pertama, Anda perlu membuat repositori baru dan commit.

Pembuatan versi proyek demo adalah cara yang bagus untuk memvisualisasikan perubahan stub di sepanjang jalan dan melihat jenis file apa yang diterbitkan Laravel ke aplikasi Anda.

Penerbitan Stubs

Langkah pertama dalam menyesuaikan stubs adalah menambahkan stubs yang disesuaikan secara individual ke folder `/stubs` di root proyek Laravel Anda. Atau Anda dapat mempublikasikan semuanya menggunakan Artisan:

$ php artisan stub:publish
$ git add stubs
$ git status
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file:   stubs/cast.stub
new file:   stubs/console.stub
new file:   stubs/controller.api.stub
new file:   stubs/controller.invokable.stub
new file:   stubs/controller.model.api.stub
new file:   stubs/controller.model.stub
new file:   stubs/controller.nested.api.stub
new file:   stubs/controller.nested.stub
new file:   stubs/controller.plain.stub
new file:   stubs/controller.stub
new file:   stubs/factory.stub
new file:   stubs/job.queued.stub
new file:   stubs/job.stub
new file:   stubs/middleware.stub
new file:   stubs/migration.create.stub
new file:   stubs/migration.stub
new file:   stubs/migration.update.stub
new file:   stubs/model.pivot.stub
new file:   stubs/model.stub
new file:   stubs/observer.plain.stub
new file:   stubs/observer.stub
new file:   stubs/policy.plain.stub
new file:   stubs/policy.stub
new file:   stubs/request.stub
new file:   stubs/resource-collection.stub
new file:   stubs/resource.stub
new file:   stubs/rule.stub
new file:   stubs/seeder.stub
new file:   stubs/test.stub
new file:   stubs/test.unit.stub

Seperti yang Anda lihat, ada beberapa stub yang diterbitkan di folder `app`. Terserah Anda untuk membuat versi semuanya, tetapi Anda dapat menyimpan salinan atau stub tertentu untuk disesuaikan.

Menyesuaikan Controller Stubs

Laravel 8.36 memperkenalkan konsep flag `--type` saat Anda membuat controller, dan Anda dapat membuat file stub kustom untuk membuat controller:
 <?php
// stubs/controller.custom.stub
namespace {{ namespace }};
use {{ rootNamespace }}Http\Controllers\Controller;
use Illuminate\Http\Request;
/**
* Hello from the custom controller stub
*/
class {{ class }}
{
//
}
Setelah menambahkan kelas stub kustom, Anda dapat menggunakan templat berikut untuk membuat controller:
 php artisan make:controller --type=custom MyController

Ini akan menghasilkan file controller sebagai berikut:

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
/**
* Hello from the custom controller stub
*/
class MyController
{
	//
}

Tingkat fleksibilitas ini sangat bagus, tetapi sebagian besar pengembang akan menemukannya di dalam stub yang disediakan oleh kerangka kerja. Menggunakan flag `--type` baru adalah cara untuk secara manual memilih template pengontrol yang akan dibuat.

php artisan make:controller --type=plain PlainController

Menghasilkan file berdasarkan file `stubs/controller.plain.stub` yang diterbitkan oleh Laravel.

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PlainController extends Controller
{
    //
}

Pendekatan yang wajar

Misalkan Anda ingin menambahkan komentar hak cipta ke setiap file yang dihasilkan oleh aplikasi Laravel Anda. Dalam hal ini, pertimbangkan untuk membuat versi semua stub yang tersedia dan jalankan perintah `stub:publish` untuk mendapatkan stub yang baru ditambahkan saat memutakhirkan.

Namun, untuk kasus penggunaan umum, Anda hanya dapat membuat versi rintisan yang perlu disesuaikan. Misalnya, Anda tidak memerlukan `controller` yang memperluas kelas Pengontrol dasar. Semua `controller.*` Anda dapat menyesuaikan dan membuat versi stub, tetapi hapus semua stub lainnya.

Bagaimana jika stub diubah ke Upstream?

Misalkan Anda membuat versi semua stub Anda dari `stub:publish`, tetapi Anda khawatir aplikasi Anda mungkin kedaluwarsa karena kerangka kerja Laravel menerima pembaruan untuk file stub inti Anda. Jika Anda telah membuat versi semua rintisan Anda, Anda selalu dapat memaksa pembaruan untuk mendapatkan versi terbaru.

Mari kita lihat contoh ini, ubah rintisan dan commit ke Git.

echo "/* test */" >> stubs/test.stub
git commit -am"Testing stub update"

Saya memperbarui stub uji dan melakukan pembaruan ke Git. Kemudian, misalkan Laravel menerbitkan beberapa pembaruan ke rintisan untuk melihat apakah ada yang berubah.

$ php artisan stub:publish --force
$ git diff
diff --git a/stubs/test.stub b/stubs/test.stub
index 834a53d..84c75cb 100644
--- a/stubs/test.stub
+++ b/stubs/test.stub
@@ -20,4 +20,3 @@ class {{ class }} extends TestCase
         $response->assertStatus(200);
     }
 }
-/* test */

Anda dapat dengan mudah melihat bagaimana stub menyimpang dari basis kode Laravel dari waktu ke waktu. stub berversi, jadi jika Anda perlu menggabungkan perubahan Anda dengan perubahan stub terbaru, Anda dapat dengan mudah membatalkan perubahan yang disebabkan oleh flag `--force`.

Sumber Referensi : Dokumentasi Resmi Laravel