Tutorial Laravel 8 Pemula #1

Pengenalan Laravel 8

Taylor Otwell baru saja merilis Laravel 8 pada tanggal 8 September 2020.

Pada versi terbaru ini, Laravel 8 memberikan beberapa fitur baru dan dukungan LTS yang keren yang perlu kita ketahui. Selengkapnya bisa kamu baca melalui artikel di bawah ini:

baca juga : Laravel 8

Cara Install Laravel 8

Dalam hal installasi, Laravel 8 menggunakan metode yang sama dengan versi sebelumnya, yaitu:

composer require laravel/laravel nama_project

Akan tetapi ini akan berpengaruh pada versi Laravel 8 ke bawah.

Otomatis, untuk mendapatkan versi 8 ke bawah perlu menambahkan versi di ujung nama project.

Penempatan Model

Taylor Otwell menulis tweet dan mengumumkan versi Laravel 8 berikutnya akan memiliki direktori baru “Model” untuk semua Model Eloquent.

Sebenarnya banyak web developer yang sudah lama menggunakan folder Models ini. Hanya saja baru diadakan kembali di versi Laravel 8.

Saat ini semua model disimpan default di folder aplikasi seperti app/User.phpapp/Post.php dll.

Tetapi Laravel 8 menyediakan direktori baru bernama Models untuk menyimpan semua model yang kita buat.

Jadi… jika kita menjalankan perintah ini php artisan make:model Post maka itu akan disimpan seperti di bawah ini:

app/Models/Post.php

Padahal di versi sebelumnya default model ada di:

app/Post.php

Tuh kan udah enak banget sekarang.

Tidak perlu lagi ketik php artisan make:model Models/Post lagi.

Peningkatan di php artisan serve

Fitur ini juga diumumkan melalui tweet Taylor Otwell dan saya akan mengulas apa manfaat fitur ini.

Biasanya, saat kita menjalankan aplikasi di local, sudah pasti melalui perintah di bawah ini:

php artisan serve

dan ketika kita mengubah beberapa nilai variabel di file .env, maka kita harus menghentikan jalannya aplikasi dan memulai kembali perintah php artisan serve.

Tetapi di Laravel 8 menyediakan cara agar kita tidak perlu merestart lagi saat mengubah nilai variabel di .env

Laravel 8 akan otomatis mengupdate tanpa perlu kita restart lagi aplikasinya.

Menghapus Controller Namespace Prefix

Laravel 8 menghapus prefix variabel $namespace dalam file RouteServiceProvider.php dari versi laravel sebelumnya.

Jadi pada dasarnya ini akan secara otomatis menerapkan namespace App\Http\Controllers ke controller.

Kita 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'));
    });
}

Meningkatkan Rate Limit

Fitur keren lainnya yang ada pada Laravel 8 adalah dapat menentukan batas waktu untuk route kita.

Jika kita sedang membangun proyek api atau beberapa proyek ERP maka kita harus menetapkan batas untuk mengaktifkan permintaan di api.

Jika tidak, server akan lebih cepat down jika seseorang melakukan begitu banyak permintaan.

… di laravel 8 telah menyediakan middleware rate limit.

dengan itu, kita dapat mengatur jumlah permintaan per waktu.

Ini contoh bagaimana kita dapat mengatur rate limit dengan Laravel 8.

Buka RouteServiceProvider.php dan tambahkan:

<?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);
    });
}
}

Kemudian pada routes/api.php atau routes/web.php kita tambahkan:

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 () {
 
}); 

Peningkatan Route Caching

Kita 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, kita dapat menyimpan rute dan kemudian jika menambahkan route baru pada file route, maka akan terjadi masalah clossure.

Tetapi Laravel 8 menyelesaikan masalah itu, jika kita akan menambahkan route baru maka Laravel akan menambahkannya secara otomatis pada file cache.

Update Design Pagination

Sekarang, Laravel 8 akan menggunakan library front-end default sebagai framework tailwind.

Jadi kelas pagination default sudah dihapus.

Tapi nggak perlu khawatir, jika kita ingin menggunakannya maka harus memanggil “useBootstrap()” di file AppServiceProvider.

Contohnya:

<?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.

Mari kita lihat contoh program versi sebelumnya dan versi 8 ini.

Versi Laravel 8 ke bawah:

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

Versi Laravel 8:

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

Queueable Model Event Listeners

Fitur baru lainnya yang saya suka yaitu ketika memanggil model create, update, delete dll maka Anda juga dapat melakukannya dengan mudah menggunakan queueable.

Kadang-kadang, kita 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.

Contoh:

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 */
}))
}
 
}

Laravel Factory

Laravel 8 telah meningkatkan dalam hal factory, sehingga kita dapat dengan mudah membuat dummy baru dari factory.

Fitur di Laravel 8 menambahkan function new times().

… dengan cara itu kita dapat menentukan opsi jumlah records yang dibuat.

Contohnya, kita dapat melihat peningkatan pada bagian ini:

Route::get('test-factory',function(){
return User::factory()->create();
});

atau 

Route::get('test-factory',function(){
return User::factory()->times(10)->create();
});

Bonus : Maintenance Mode: Secreet Access

Jika kamu menginginkan agar website menjadi down atau up, maka cukup dengan command di bawah ini:

php artisan down
php artisan up

Laravel 8 pun memberikan cara agar kita dapat membuat kunci rahasia untuk memberikan akses kepada banyak orang.

Kita bisa menggunakan secret dan mengabaikan cookie, jadi sampai website kita pada posisi up, user bisa mengakses versi yang lama.

php artisan down --secret=new-pass

Sekarang, silahkanbuat route baru dan jika kita mengakses rute ini maka itu aplikasi web akan mengabaikan cookie dan mengakses situs web dengan mengikuti url:

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

Leave a Reply

%d bloggers like this: