Tim Laravel telah merilis versi terbaru pada Framework Laravel dan tentunya dengan beberapa pembaharuan diantaranya sebagai berikut.
Fitur-fitur Baru di Laravel 9.5
Memperbolehkan callable pada Http::beforeSending
Dries Vints berkontribusi pada Http::beforeSending untuk dapat menerima callable dibandingkan hanya kelas invokable. Contoh dibawah ini akan berfungsi dengan baik ketimbang mendapatkan error "Call to member function __invoke() on array":
Http::baseUrl('https://api.example.org')
->beforeSending([ $this, 'prepareRequest' ])
->asJson()
->withoutVerifying();
Helper freezeTime untuk Pengetesan
@Italo berkontribusi sebuah fungsi freezeTime() untuk melakukan freezing atau pembekuan/penghentian waktu saat pengetesan:
public function test_something()
{
$this->freezeTime();
// Or set the time at the current second for dates
// that have no sub-second precision.
$this->freezeSecond();
}
Method freezeTime() juga bersifat syntactic sugar seperti berikut:
$this->travelTo(Carbon::now());
Helper baru untuk Men-Wrapping String
Markus Hebenstreit menambahkan helper baru wrap() untuk string. Contohnya sebagai berikut:
Str:wrap('value')->wrap('"');
Str::of('value')->wrap('"');
str('value')->wrap('"');
// Outputs: "value"
Str:wrap('is', 'This ', ' me!');
Str::of('is')->wrap('This ', ' me!');
str('is')->wrap('This ', ' me!');
// Outputs: This is me!
Method baru untuk membuat "through" model
Hafez Divandari berkontribusi fitur untuk membuat model "through" baru tanpa meng-override keseluruhan method hasOneThrough atau hasManyThrough.
// Define a `newThroughInstance` method
protected function newThroughInstance($resource)
{
return (new \App\Models\ExampleEntity)->setTable($resource);
}
Antrian imitasi parsial
Taylor Otwell menambahkan fitur pemalsuan atau pengimitasian jobs pada queue dalam pengetesan:
Queue::fake([JobsToFake::class, /* ... */]);
Asersi JSON "assertJsonPath()" dapat menerima closure
Fabien Villepinte berkontribusi fitur untuk memberi sebuah closure pada assertJsonPath tanpa masalah terkait kompabilitas:
$response = TestResponse::fromBaseResponse(new Response([
'data' => ['foo' => 'bar'],
]));
$response->assertJsonPath('data.foo', 'bar');
$response->assertJsonPath('data.foo', fn ($value) => $value === 'bar');
Contoh diatas memang langsung ke intinya, namun sekarang kamu juga telah bisa memberikan closure jika memerlukan logika yang kompleks terkait asersi path.
Asersi direktori kosong dengan Storage Fake
Mark Beech menambahkan kemampuan untuk mengasersi sebuah direktori kosong dengan instance Storage::fake():
// Before 9.5
$this->assertEmpty(Storage::disk('temp')->allFiles('/foo'));
// +9.5
Storage::disk('temp')->assertDirectoryEmpty('/foo');
Jika tidak ada file-file di dalam sebuah direktori tetapi terdapat subdirektori di dalamnya, asersi ini bakalan gagal karena di dalam direktori tersebut terdapat direktori-direktori.
Storage::fake('temp');
Storage::disk('temp')->put('/foo/bar.txt', 'string');
Storage::disk('temp')->assertDirectoryEmpty('/'); // fail
Penggunaan callback pada Implode Collection
@Lito berkontribusi terkait penggunaan callback pada Collect::implode() untuk menyederhanakan panggilan ->map()->implode()
{{-- Before --}}
<span>{{ $user->cities->map(fn ($city) => $city->name.' ('.$city->state->name.')')->implode(', ') }}</span>
{{-- Using a callback --}}
<span>{{ $user->cities->implode(fn ($city) => $city->name.' ('.$city->state->name.')', ', ') }}</span>
Catatan Rilis Laravel 9.5
Beberapa catatan rilis di Laravel 9.5 terkait penambahan, perbaikan dan perubahan.
Penambahan di Laravel 9.5
- Menambahkan dukungan callback pada method Implode Collection. (#41405)
- Menambahkan Illuminate/Filesystem/FilesystemAdapter::assertDirectoryEmpty() (#41398)
- Menambahkan metadata untuk SesTransport (#41422)
- Memungkinkan assertPath() menerima closure (#41409)
- Memungkinkan callable untuk operatorForWhere pada collection (#41414, #41424)
- Menambahkan queue faking (antrian imitasi) (#41425)
- Menambahkan opsi --name untuk perintah schedule:test (#41439)
- Mendefinisikan Illuminate/Database/Eloquent/Concerns/HasRelationships::newRelatedThroughInstance() (#41444)
- Menambahkan Illuminate/Support/Stringable::wrap() (#41455)
- Menambahkan helper "freezeTime" untuk pengetesan (#41460)
- Memungkinkan beforeSending dengan callable Illuminate/Http/Client/PendingRequest.php::runBeforeSendingCallbacks() (#41489)
Perbaikan di Laravel 9.5
- Perbaikan pada peringatan fitur terdepresiasi pada route:list terkait pemfilteran nama atau domain (#41421)
- Perbaikan respon HTTP::pool ketika URL kembali dengan kode status null (#41412)
Perbaikan resolusi nama pada
- Illuminate/Session/Middleware/AuthenticateSession.php (#41429)
- Perbaikan guard instance yang digunakan di /Illuminate/Session/Middleware/AuthenticateSession.php(#41447)
- Perbaikan opsi -except-vendor pada route:list yang mengecualikan Route::view & Route::redirect() (#41465)
Perubahan di Laravel 9.5
- Menambahkan null typing pada koneksi terhadap properti di \Illuminate\Database\Eloquent\Factories\Factory (#41418)
- Memperbarui reserved names di GeneratorCommand (#41441)
- Mendesain ulang perintah php artisan schedule:list (#41445)
- Meningkatkan urutan properti proxy pada Eloquent (#41449)
- Memperbolehkan pemberian argumen-argumen bernama pada scope dinamis (#41478)
- Pelemparan error apabila tag dapat terlewati tapi tidak didukung pada Illuminate/Encryption/Encrypter.php (#41479)
- Pembaruan inisialisasi PackageManifest::$vendorPath untuk skenario, dimana direktori vendor composer tidak ada dalam direktori proyek (#41463)
Artikel ini disadur dari sumber asalnya yakni laravel-news.