Laravel 8 มีอะไรใหม่บ้าง ?

หมวดหมู่ : Laravel

อ่าน : 3,424
laravel laravel8 laravel 8
Laravel 8 มีอะไรใหม่บ้าง ?

Laravel 8  มีสิ่งอัปเดทใหม่ ดังนี้ครับ


1. Models Directory

ง่ายๆ เลยครับ คือ Class Model จะถูกสร้างใน Folder Model เหมือนสมัยก่อน โดยที่เราไม่ต้องมานั่งเขียน php artisan make:model Model/User แบบนี้อีกต่อไป จากที่เมื่อก่อน เคยทำแบบนี้มาก่อน แล้วกลับมาใช้แบบนี้อีกด้วยทนแรงกดดันไม่ไว้ 




2. Model Factory Classes

เพิ่ม extends Factory ภาย Auto ใน Class ? ทำให้ เราสามารถ สร้างข้อมูลจำลองใน model ได้เลย

<?php

namespace DatabaseFactories;

use AppModelsUser;
use IlluminateDatabaseEloquentFactoriesFactory;
use IlluminateSupportStr;

class UserFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = User::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'name' => $this->faker->name,
            'email' => $this->faker->unique()->safeEmail,
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
            'remember_token' => Str::random(10),
        ];
    }
}

ซึ่งเราสามารถเรียกใช้ได้ ดังนี้

use AppModelsUser;

User::factory()->count(50)->create();




3. Migration Squashing

คำสั่งในการ 
dump schema ของฐานข้อมูล

php artisan schema:dump

// Dump the current database schema and prune all existing migrations...
php artisan schema:dump --prune
สามารถใช้ได้กับ ฐานข้อมูล MySQL, PostgreSQL, และ SQLite databases เท่านั้น



4Job Batching

การทำ Job และการจัดการคิว ของ job ได้ดีขึ้น  คุณอาจตะต้องใช้  then , cath และ finally ช่วยในขณะ Callback สามารถอ่านเพิ่มเติ่มได้ที่นี้


5.Improved Rate Limiting

ปรับปรุงเรื่องการเวลาตอสนองของ api  

RateLimiter::for('uploads', function (Request $request) {
    return $request->user()->vipCustomer()
                ? Limit::none()
                : Limit::perMinute(100);
});
หากอยากจะใช้กับ middleware 

Route::middleware(['throttle:uploads'])->group(function () {
    Route::post('/audio', function () {
        //
    });

    Route::post('/video', function () {
        //
    });
});

6. Improved Maintenance Mode

 โหมดในการบำรุงรักษา หรือ เปิดโหมดปรับปรุงระบบ


php artisan down --secret="1630542a-246b-4b66-afa1-dd72a4c43515"



เมื่อรันไปแล้วจะทำให้เขาหน้าเว็บไม่ได้




หากต้องการเปิดหน้าเว็บต้อง เราต้องใส่ 
secret key ที่เราตั้งไว้ ดังนี้

https://example.com/1630542a-246b-4b66-afa1-dd72a4c43515

เราสามารถกำหนดหน้าที่จะแสดงได้ ด้วยคำสั่ง นี้ errors::503 คือหน้าที่เราต้องการให้ render

php artisan down --render="errors::503"

เมื่อจะยกเลิกโหมดปรับปรุง ให้รันคำสั่ง

php artisan up

7. Closure Dispatch / Chain

การเรียกใช้ คำสั่ง catch 

use Throwable;

dispatch(function () use ($podcast) {
    $podcast->publish();
})->catch(function (Throwable $e) {
    // This job has failed...
});

8.Dynamic Blade Components

หากเราจะเรียกใช้ components แต่ไม่ทราบว่าจะใช้ conponents ใด เราสามารถเรียกแบบ Dyanmic ได้ dynamic-component

<x-dynamic-component :component="$componentName" class="mt-4" />

อ่านเพิ่มเติมได้ที่นี้


9.Event Listener Improvements

ปรับปรุงการเรียกใช้งานและความสามารถของ Event Listener 
อ่านเพิ่มเติ่มได้ที่นี้


10.Time Testing Helpers

เมื่อการทดสอบบางครั้งคุณอาจต้องปรับเปลี่ยนเวลาในการส่ง

public function testTimeCanBeManipulated()
{
    // Travel into the future...
    $this->travel(5)->milliseconds();
    $this->travel(5)->seconds();
    $this->travel(5)->minutes();
    $this->travel(5)->hours();
    $this->travel(5)->days();
    $this->travel(5)->weeks();
    $this->travel(5)->years();

    // Travel into the past...
    $this->travel(-5)->hours();

    // Travel to an explicit time...
    $this->travelTo(now()->subHours(6));

    // Return back to the present time...
    $this->travelBack();
}

11. Artisan serve Improvements

เมื่อเรสมีการเปลี่ยนค่าใน .env ต่อไปนี้ก็ไม่ต้องไป รัน php artisan serv ใหม่แล้ว เพราะมันจะ reboot ให้อัตโนมัติ


12.Tailwind Pagination Views

ใช้ Tailwind css แทน bootstrap   อ่านเพิ่มเติมได้ที่


13.Routing Namespace Updates

เปลี่ยนการเขียน Route จากเดิม

Route::get('user/{id}', 'UserController@show');
ด้วยการเรียก Namespace แทน แบบนี้

use AppHttpControllersUserController;

Route::get('/users', [UserController::class, 'index']);
หรือ  action

action([UserController::class, 'index']);

return Redirect::action([UserController::class, 'index']);