Tutorial Laravel 8 Pemula #1

Contents
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.php
, app/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