ahmadajah03 Sun Sep 2020 1 year ago

Fitur Baru Laravel 8 | Apa yang Baru di Laravel 8

Halo semua,

Dalam tutorial ini, saya akan menunjukkan kepada Anda apa yang baru di versi laravel 8. saya akan memberi Anda poin bijak laravel 8 fitur baru dan menjelaskan bagaimana Anda dapat menggunakannya dan apa yang dihapus di laravel 8.

8 September Laravel 8 akan diluncurkan, Taylor Otwell mengumumkan di situs laravel. jadi kami menunggu laravel 8 dengan fitur baru yang luar biasa. Saya membaca situs web laravel dan panduan peningkatan dan saya menemukan beberapa fitur baru yang menarik yang menyukainya.

Jadi, di sini saya akan menunjukkan kepada Anda satu per satu beberapa fitur hebat yang hadir di aplikasi laravel 8. mereka menambahkan lebih banyak peningkatan pada model, .env, pembatasan kecepatan, caching rute, pabrik, namespace pengontrol, dll.

Mari kita lihat satu per satu secara detail karena saya dapat membantu Anda lebih banyak.

*) Default app/Models Directory for Model

Taylor Otwell tweet dan mengumumkan ke versi laravel 8 berikutnya akan memiliki direktori baru "Models" untuk semua Model Eloquent dan saya suka fitur ini.

Saat ini semua model disimpan default di folder aplikasi seperti app/User.php, app/Post.php dll. Tetapi laravel 8 menyediakan direktori baru "Models" untuk menyimpan semua model pada folder tersebut sehingga akan terlihat seperti di bawah ini:

 

Path model lama:

app/User.php
app/Post.php

Path model baru:

app/Models/User.php
app/Models/Post.php

Jika Anda juga ingin menyimpan model di folder aplikasi, Anda dapat menghapus folder "Model" dan menjalankan perintah artisan untuk membuat model, itu akan membuat model di folder aplikasi.

*) Peningkatan pada php artisan serve

Fitur ini juga diumumkan melalui tweet dan saya dapat menunjukkan kepada Anda apa manfaat fitur ini. saat Anda bekerja secara lokal. Anda sudah menjalankan berikan melalui perintah di bawah ini:

php artisan serve

dan Anda perlu mengubah beberapa nilai variabel di file .env, maka Anda harus memulai kembali perintah serve Anda sekarang. tetapi laravel 8 menyediakan cara agar Anda tidak perlu merestart lagi melayani perintah. nilai variabel akan mencerminkan secara otomatis.

Jadi, suka juga fitur ini karena kita tidak perlu me-restart lagi dan lagi ketika kita mengubah nilai file .env.

*) Removed Controllers Namespace Prefix

Laravel 8 menghapus prefix variabel $namespace dari file RouteServiceProvider.php dari versi laravel sebelumnya. jadi pada dasarnya ini akan secara otomatis menerapkan namespace "App\Http\Controllers" ke controller.

Anda dapat melihat RouteServiceProvider.php lama dan file RouteServiceProvider.php baru.

RouteServiceProvider.php lama:

<?php

namespace App\Providers;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;

class RouteServiceProvider extends ServiceProvider
{
  /**
   * This namespace is applied to your controller routes.
   *
   * In addition, it is set as the URL generator's root namespace.
   *
   * @var string
     */

  protected $namespace = 'App\Http\Controllers';
  /**
   * The path to the "home" route for your application.
   *
   * @var string
   */
  public const HOME = '/home';
....

RouteServiceProvider.php baru:

<?php
  
namespace App\Providers;
  
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\Route;
  
class RouteServiceProvider extends ServiceProvider
{
    /**
     * The path to the "home" route for your application.
     *
     * This is used by Laravel authentication to redirect users after login.
     *
     * @var string
     */
    public const HOME = '/home';
  
    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @return void
     */
    public function boot()
    {
        $this->configureRateLimiting();
  
        $this->routes(function () {
            Route::middleware('web')
                ->group(base_path('routes/web.php'));
  
            Route::prefix('api')
                ->middleware('api')
                ->group(base_path('routes/api.php'));
        });
    }
  
....

*) Enhanced Rate Limiting

Fitur hebat lainnya oleh laravel 8. Anda dapat menentukan batas rate untuk route Anda. jika Anda sedang membangun proyek api atau beberapa proyek ERP maka Anda harus menetapkan batas untuk mengaktifkan permintaan di api Anda atau mengunduh file jika tidak, server kami dapat turun jika seseorang memecat begitu banyak permintaan.

Jadi, laravel 8 menyediakan middleware batas kecepatan di sana Anda dapat mengatur jumlah permintaan per waktu. saya akan menunjukkan kepada Anda bagaimana Anda dapat mengatur dengan laravel 8 di bawah ini:

RouteServiceProvider.php

<?php
  
namespace App\Providers;
  
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\Route;
  
class RouteServiceProvider extends ServiceProvider
{
    /**
     * The path to the "home" route for your application.
     *
     * This is used by Laravel authentication to redirect users after login.
     *
     * @var string
     */
    public const HOME = '/home';
  
    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @return void
     */
    public function boot()
    {
        RateLimiter::for('uploadFile', function (Request $request) {
            Limit::perMinute(8)->by($request->ip()),
        });
  
        RateLimiter::for('downloadFile', function (Request $request) {
            if ($request->user()->isSubscribed()) {
                return Limit::none();
            }
            Limit::perMinute(8)->by($request->ip()),
        });
  
        $this->configureRateLimiting();
  
        $this->routes(function () {
            Route::middleware('web')
                ->group(base_path('routes/web.php'));
  
            Route::prefix('api')
                ->middleware('api')
                ->group(base_path('routes/api.php'));
        });
    }
  
    /**
     * Configure the rate limiters for the application.
     *
     * @return void
     */
    protected function configureRateLimiting()
    {
        RateLimiter::for('api', function (Request $request) {
            return Limit::perMinute(60);
        });
    }
}

Use Rate Limit

Route::get('upload','FileController@index')->->middleware('throttle:uploadFile');
Route::get('download','FileController@index')->->middleware('throttle:downloadFile');
  
/* or use it no group */
Route::middleware(['throttle:uploadFile'])->group(function () {
       
}); 

*) Enhanced on Route Caching

Kami hampir menggunakan cache laravel untuk view, config dan route. Sedangkan untuk route kita menggunakan perintah "php artisan route:cache" untuk cache route.

Di versi laravel sebelumnya, Anda dapat menyimpan route dan kemudian jika Anda menambahkan route baru pada file route maka itu masalah penutupan. Tetapi laravel 8 menyelesaikan masalah itu, jika Anda akan menambahkan route baru maka itu akan menambahkannya secara otomatis pada file cache.

*) Update on Pagination Design

Sekarang, laravel 8 akan menggunakan library front-end default sebagai framework tailwind. jadi kelas pagination default dihapus. tetapi jika Anda ingin menggunakannya maka Anda harus memanggil "useBootstrap()" di file AppServiceProvider.

Anda dapat menggunakan sebagai berikut:

<?php
  
namespace App\Providers;
  
use Illuminate\Support\ServiceProvider;
use Illuminate\Pagination\Paginator;
  
class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
  
    }
  
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Paginator::useBootstrap();
    }
}

*) Update Syntax for Closure Based Event Listeners

Laravel 8 mengubah sintaks untuk memanggil event listener. jadi saya bisa menunjukkan contoh di bawah ini dengan sintaks lama dan baru:

Lama:

Event::listen(OrderShipped::class, function(OrderShipped $event) { 

    // Do something

});

Baru:

Event::listen(function(OrderShipped $event) { 
    /* Do something */
});

*) Queueable Model Event Listeners

Fitur hebat baru lainnya yang saya suka. ketika Anda memanggil model creating, created, updating, updated dll maka Anda juga dapat melakukannya dengan mudah.

Kadang-kadang, kami mengirimkan pemberitahuan email ke admin ketika membuat produk baru sehingga mungkin perlu waktu untuk mengirim email. jadi di backend Anda bisa menggunakan event model eloquent laravel dengan queueable.

Mari kita lihat contoh:

Product Model:

class Product extends Model {
  
    protected static function booting() 
    {
        static::created(queueable(function(Product $product) {
           /* Write something Here  */
        }))
  
        static::updated(queueable(function(Product $product) {
           /* Write something Here */
        }))
    }
      
}

*) Maintenance mode: secret access

Jika Anda ingin website down and up maka kami menggunakan perintah berikut:

php artisan down
php artisan up

Tetapi ketika Anda ingin menampilkan ambang situs web ketika Anda mengunggah di server ke beberapa orang maka Anda tidak dapat memberi.

Laravel 8 memberikan cara Anda dapat membuat rahasia untuk memberikan akses kepada banyak orang. Anda bisa menggunakan secret dan mengabaikan cookie, jadi sampai website Anda up mereka bisa mengakses versi lama.

php artisan down --secret=new-pass

sekarang ini akan membuat route baru dan jika Anda mengakses route ini maka itu akan mengabaikan cookie dan mengakses situs web dengan mengikuti url:

https://www.example.com/new-pass

*) Maintenance mode: pre-rendered page

Laravel 8 menambahkan opsi baru untuk segera menampilkan kembali halaman ketika situs web Anda turun. Anda dapat menggunakan opsi render dengan jalur file dan itu akan menampilkan file itu hingga situs web:

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

Anda juga dapat menggunakan perintah seperti di bawah ini:

php artisan down --redirect=/ --status=200 --secret=myPassword --render="errors::503"

*) Queued job batching

Laravel 8 menyediakan fitur baru Queued job batching sehingga Anda dapat menambahkan banyak pekerjaan ke antrian sekaligus sebagai batch. ada callback then(), catch() dan finally() yang akan diaktifkan pada semua tugas yang akan selesai.

Anda dapat memanggil banyak pekerjaan seperti di bawah ini:

Bus::batch([
  new SendMailJob(),
  new SendMailJob(),
  new SendMailJob(),
  new SendMailJob(),
  new SendMailJob(),
])->then(function(Batch $batch){
  /* All jobs completed successfully  */
})->catch(function(Batch $batch) {
  /* First job failure detected */
})->finally(function(Batch $batch) {
  /* All jobs have finished executing */
})->dispatch();

*) Queue backoff()

Laravel 8 menambahkan metode baru backoff() ketika Anda dapat mendefinisikan di Queue job class Anda. Anda dapat menentukan waktu bilangan dengan array untuk disetel untuk coba lagi setelahnya.

Anda dapat memanggil job seperti di bawah ini:

class ExampleJob

{
  /**
  * Calculate the number of seconds to wait before retrying the job.
  *
  * @return array
    */

  public function backoff()
  {
      return [1, 5, 10];
  }
  ....
}

*) Laravel Factory

Model Laravel 8 ditingkatkan dari factory, sehingga Anda dapat dengan mudah membuat catatan dummy baru dari factory. mereka menambahkan new times() dengan cara itu Anda dapat menentukan opsi jumlah rekaman yang dibuat. sehingga Anda dapat melihat peningkatan di bawah ini:

Route::get('test-factory',function(){

   return User::factory()->create();

});
Route::get('test-factory',function(){

   return User::factory()->times(10)->create();

});

Ada lebih banyak fitur laravel 8 yang ditambahkan, tetapi saya melihat dan apa yang saya suka saya hanya menjelaskan kepada Anda. Anda juga dapat melihat panduan peningkatan laravel 8 dari sini: Panduan Upgrade Laravel 8 .

Saya harap ini dapat membantu Anda.

Terima kasih.

install laravel 8 fitur baru laravel 8 laravel 8