Hello Gaes, Salah satu hal baru yang dikenalkan di Laravel 10 adalah penggunaan native PHP type declarations.
Membuat Controller di Laravel 10
Sebagai contoh, ketika kita membuat sebuah controller di Laravel 10 dengan perintah berikut:
php artisan make:controller ProductController -r
Maka hasil kode program yang di hasilkan (app/Http/Controllers/ProductController.php) adalah seperti berikut:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class ProductController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(): Response
{
//
}
/**
* Show the form for creating a new resource.
*/
public function create(): Response
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request): RedirectResponse
{
//
}
/**
* Display the specified resource.
*/
public function show(string $id): Response
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id): Response
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id): RedirectResponse
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id): RedirectResponse
{
//
}
}
Membuat Route di Laravel 10
Kemudian, kita tambahkan tambahkan routenya (routes/web.php) sehingga menjadi seperti berikut:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ProductController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::get('products', [ProductController::class, 'index'])->name('products.index');
Route::get('products/create', [ProductController::class, 'create'])->name('products.create');
Route::post('products', [ProductController::class, 'store'])->name('products.store');
Route::get('products/{id}/edit', [ProductController::class, 'edit'])->name('products.edit');
Route::put('products/{id}', [ProductController::class, 'update'])->name('products.update');
Route::delete('products/{id}', [ProductController::class, 'destroy'])->name('products.destroy');
Terjadi Error : Return value must be of type Illuminate\Http\Response, none returned
Setelah kita jalankan projectnya dengan perintah php artisan serve
kemudian kita akses di browser http://localhost:8000/products
terjadi error Return value must be of type Illuminate\Http\Response, none returned
, yang mana ini tidak terjadi di Laravel versi sebelumnya.
Error ini terjadi karena kita tidak memberikan response yang kompatibel dengan object Response
pada method index
di ProductController
tersebut.
Mengatasi Error Return value must be of type Illuminate\Http\Response, none returned di Laravel 10
Cara mengatasi error tersebut adalah:
Ketika Ingin Membuat Rest API
Ketika ingin response dari http://localhost:8000/products
adalah berupa JSON
, maka kita dapat mengubah kode program pada method index
menjadi seperti berikut:
public function index(): Response
{
return response(['foo' => 'bar']);
}
Kemudian kita akses menggunakan browser maka akan tampil JSON seperti berikut:
Ketika Ingin Menampilkan Blade View
Sedangkan jika kita ingin response tersebut adalah berupa halaman web maka kita ubah kode programnya menjadi seperti berikut:
public function index(): Response
{
return response(view('products.index'));
}
Tentu saja, kita perlu buat file blade dengan nama index.blade.php pada folder resources/views/products
. Misalnya aja kita isi file blade tersebut dengan konten seperti berikut:
<h3>Products Page</h3>
<p>Ini adalah halaman list produk</p>
Kemudian kita akses menggunakan browser maka tampilannnya akan seperti berikut:
Selamat mencoba!
Tulis Komentar