Memulai Web Development dengan Laravel - Menggunakan Response dan View

Muhammad Arslan 15 April 2017

Memulai Web Development dengan Laravel - Menggunakan Response dan View

Suatu aplikasi web pastinya akan menghasilkan response entah dalam format apapun yahng dikeluarkan sesuai dengan kebutuhannya. Response dapat berupa HTML, JSON, XML, file, dan lainnya. Selain itu response memiliki status code yang dapat bervariasi tergantung aplikasi web tersebut dirancang.

Sekarang kita akan mencoba menggunakan objek Response di Laravel dan bagaimana kita merancang view yang dapat membuat response menjadi lebih baik dan mudah dikelola.

##Berbagai Cara dalam Menggunakan Response

Pertama silahkan buat terlebih dahulu controller dengan nama DemoResponseController.php di dalam app\Http\Controllers. Kemudian buat kode berikut di dalam file tadi:

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Redis;

class DemoResponseController extends Controller {

	public function index() {

		return "Ini adalah index";
	}

	public function showOk()
	{
		return response('Hi, i am okay', 200)
                  ->header('Content-Type', 'text/plain');
	}

	public function showNotFound()
	{
		return response('Hi, i am not found', 404)
                  ->header('Content-Type', 'text/plain');
	}

	public function showBadResponse()
	{
		return response('Hi, i am bad response', 500)
                  ->header('Content-Type', 'text/plain');
	}

	public function showArray() {

		return [ "numbers" => [ 1, 2, 3, 4, 5] ];
	}

	public function showJsonArray() {

		return response([ "numbers" => [ 1, 2, 3, 4, 5] ], 200)
                  ->header('Content-Type', 'application/json');
	}

	public function customResponseHeader() {

		return response("<Codepolitan><Tutorial><Title>Belajar Laravel</Title><Description>Lorem Ipsum sit dolor amet...</Description></Tutorial></Codepolitan>")
            ->withHeaders([
                'Content-Type' => "application/xml",
                'X-Server-Key-1' => 'Codepolitan',
                'X-Server-Key-2' => 'Nyankod',
            ]);
	}

	public function redirectToPage() {

		return redirect('demo-response/callback');
	}

	public function redirectWithFlashData() {

		return redirect('demo-response/callback')->with('status', 'Redirection is success!');
	}

	public function redirectCallback() {
		if (session('status'))
		{
			return session('status');
		}
		else
		{
			return "Redirection without flash data...";
		}
	}

	public function showJson()
	{
		return response()->json([
		    'website' => 'https://www.codepolitan.com',
		    'topics' => [
		    	"PHP",
		    	"Python",
		    	"Angular.js",
		    	"Node.js",
		    	"Express.js",
		    	"Django",
		    	"Laravel",
		    	"Yii2",
		    	"MySQL",
		    	"Redis",
		    	"Elasticsearch"
		    ]
		]);
	}

	public function fileDownload()
	{
		return response()->download("./laravel-framework.jpg");
	}

	public function fileResponse()
	{
		return response()->file("./laravel-framework.jpg");
	}
}

Lalu tambahkan kode pendefinisian route untuk DemoResponseController di dalam route/web.php:

Route::group(["prefix"=>"demo-response"], function () {
	Route::get("/", "DemoResponseController@index");
	Route::get("/array", "DemoResponseController@showArray");
	Route::get("/header_ok", "DemoResponseController@showOk");
	Route::get("/header_not_found", "DemoResponseController@showNotFound");
	Route::get("/header_bad_response", "DemoResponseController@showBadResponse");
	Route::get("/header_json", "DemoResponseController@showJsonArray");
	Route::get("/header_custom", "DemoResponseController@customResponseHeader");
	Route::get("/redirect", "DemoResponseController@redirectToPage");
	Route::get("/redirect_flash_data", "DemoResponseController@redirectWithFlashData");
	Route::get("/callback", "DemoResponseController@redirectCallback");
	Route::get("/json", "DemoResponseController@showJson");
	Route::get("/file_download", "DemoResponseController@fileDownload");
	Route::get("/file_response", "DemoResponseController@fileResponse");
});

Sekarang mari kita jelaskan satu per satu dari setiap method yang ada di DemoResponseController:

  • index(), kamu dapat memberikan response hanya berupa string saja
  • showArray(), kamu dapat memberikan response berupa array yang akan dikonversi menjadi response JSON secara implisit
  • showOk(), kamu dapat memberikan response dengan status code 200
  • showNotFound(), kamu dapat memberikan response dengan status code 404
  • showBadResponse(), kamu dapat memberikan response dengan status code 500
  • showJsonArray(), kamu dapat memberikan response JSON secara eksplisit
  • customResponseHeader(), kamu dapat memberikan custom header pada response sesuai kebutuhan kamu
  • redirectToPage(), kamu dapat melakukan redirect ke suatu halaman
  • redirectWithFlashData(), kamu dapat melakukan redirect ke suatu halaman dengan menyisipkan flash data
  • showJson(), kamu dapat menggunakan response->json() untuk membuat response JSON
  • fileDownload(), kamu dapat membuat suatu response menjadi force download
  • fileResponse, kamu dapat membuat suatu response untuk menampilkan file yang ditentukan

Kamu dapat mengakses semua method diatas melalui URL:

##View di Laravel

Sekarang kita akan membuat sebuah view sederhana di Laravel. Pertama buat dulu controller dengan nama DemoViewController.php. Kemudian buat kode berikut di dalam file tersebut:

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Redis;

class DemoViewController extends Controller {

	public function index() {

		$products = [
			[
				"id" => 1,
				"name" => "Odol",
				"price" => 5000
			],
			[
				"id" => 2,
				"name" => "Lampu Pilip",
				"price" => 25000
			],
			[
				"id" => 3,
				"name" => "Pembersih Lantai Weepol",
				"price" => 15000
			],
			[
				"id" => 4,
				"name" => "Beras Cianjur",
				"price" => 95000
			],
			[
				"id" => 5,
				"name" => "Cheese Cake",
				"price" => 9000
			],
		];

		return view('demo.index', ["products" => $products]);
	}

	public function detail($id=0)
	{
		$products = [
			[
				"id" => 1,
				"name" => "Odol",
				"price" => 5000
			],
			[
				"id" => 2,
				"name" => "Lampu Pilip",
				"price" => 25000
			],
			[
				"id" => 3,
				"name" => "Pembersih Lantai Weepol",
				"price" => 15000
			],
			[
				"id" => 4,
				"name" => "Beras Cianjur",
				"price" => 95000
			],
			[
				"id" => 5,
				"name" => "Cheese Cake",
				"price" => 9000
			],
		];

		$item = [];
		foreach ($products as $product)
		{
			if ($product['id'] == (int) $id)
			{
				$item = $product;
				break;
			}
		}

		return view('demo.detail', ["id" => $id, 'product'=>$product]);
	}
}

Berikut adalah view untuk index(). Buat view berikut di dalam resources/views/demo/index.php:

<h1>Ini adalah halaman index</h1>

<p>Lorem ipsum sit dolor amet</p>

<ul>
	<?php foreach ($products as $product) { ?>
	<li><?php echo $product['name'] ?> - <?php echo $product['price'] ?></li>
	<?php } ?>
</ul>

Sedangkan berikut adalah view untuk detail(). Buat view berikut di dalam resources/views/demo/detail.php:

<h1>Ini adalah halaman detail - <?php echo $id ?></h1>

<p><?php echo $product['name'] ?> - <?php echo $product['price'] ?></p>

Selanjutnya tambakan route untuk DemoViewController.php di routes/web.php:

Route::group(["prefix"=>"demo-view"], function () {
	Route::get("/", "DemoViewController@index");
	Route::get("/{id}", "DemoViewController@detail");
});

Pada method index() kita lewatkan sebuah array yang memiliki item berupa barang dagangan. Kemudian kita tampilkan di dalam view demo/index.php. Sedangkan untuk method detail() kita cari barang dagangan yang seusai dengan id kemudian ditampilkan di dalam view demo/detail.php

Kamu dapat mengakses kedua method tadi melalui URL: