ตอนนี้มาดูวิธีการส่งค่าตัวแปรจาก Controller ไปยัง View เพื่อแสดงค่าตัวแปรนั้น ออกทางหน้าเว็บ
เพื่อแยกส่วนของการพัฒนาโปรแกรม หลังจากที่ส่วน Controller ประมวลผลจนได้ค่าที่ต้องการเก็บไว้ในตัวแปร เช่นในเมธอด contact()
เราต้องการส่งค่าตัวแปร $address
ไปยัง View สามารถทำได้โดยระบุในพารามิเตอร์ที่สองในฟังก์ชัน view()
แก้ไขเมธอด contact()
ในไฟล์ app/Http/Controllers/PageController.php
โดยระบุค่าตัวแปรที่ต้องการส่งไปยัง view เป็นพารามิเตอร์ที่ 2 ในรูปแบบ Associcate Array
เช่นตัวอย่างด้านล่าง ส่งค่าตัวแปร $address
ในไปเป็นชื่อตัวแปร address
เพื่อเรียกใช้ใน View ได้
// app/Http/Controllers/PageController.php
class PageController extends Controller
{
// ...
public function contact()
{
$address = '123 Bangkok';
return view('contact', ['address' => $address]);
}
}
แทนที่จะระบุค่าที่ส่งไปยัง view ในรูปแบบ Associate Array เราสามารถใช้ฟังก์ชัน compact
แล้วระบุชื่อตัวแปร โดยไม่ต้องใส่เครื่องหมาย $
นำหน้า
เช่นเราต้องการส่งค่าตัวแปร $address
ก็สามารถทำได้โดย
// app/Http/Controllers/PageController.php
class PageController extends Controller
{
// ...
public function contact()
{
$address = '123 Bangkok';
return view('contact', compact('address'));
}
}
ถ้าเราต้องการส่งหลายตัวแปร ก็ระบุในฟังก์ชัน compact()
เป็นพารามิเตอร์ที่ 2, 3, .. ไปเรื่อยๆ
ตัวอย่างการส่งหลายค่าตัวแปร
// app/Http/Controllers/PageController.php
class PageController extends Controller
{
// ...
public function contact()
{
$address = '123 Bangkok';
$name = 'Example Co., Ltd.';
return view('contact', compact('address', 'name'));
}
}
ใน Laravel มีอีกหลายวิธีในการส่งค่า แต่การใช้ฟังก์ชัน compact()
จะเป็นที่นิยม เพราะไม่ต้องพิมพ์ซ้อน เหมือนกับรูปแบบอื่นๆ
หมายเหตุ จริงๆ แล้ว compact()
เป็นฟังก์ชันใน PHP เพื่อแสดงค่าของชื่อตัวแปรที่ระบุ ในรูปแบบ Associate Array ซึ่งก็เหมือนกับการส่งค่าแบบแรก
$address = '123 Bangkok';
$name = 'Example Co., Ltd.';
print_r(compact('address', 'name'));
// Array
// (
// [address] => 123 Bangkok
// [name] => Example Co., Ltd.
// )
หลังจากรับค่ามาแล้ว วิธีการแสดงค่าตัวแปรใน View สามารถทำได้โดยใช้รูปแบบ {{ $variable_name }}
ตัวอย่างการแก้ไขไฟล์ resources/views/contact.blade.php
เพื่อแสดงค่าตัวแปร address
กับ name
ที่ส่งมาจาก Controller
หมายเหตุ อย่าลืมระบุเครื่องหมาย $
นำหน้าชื่อตัวแปรเพื่อแสดงค่าตัวแปรใน View
@extends('app')
@section('content')
Contact Us from View<br>
Company Name: {{ $name }}<br>
Address: {{ $address }}<br>
@endsection
ทดสอบด้วยคำสั่ง curl
$ curl http://blog.test/contact
<html>
<body>
Contact Us from View<br>
Company Name: Example Co., Ltd.<br>
Address: 123 Bangkok<br>
</body>
</html>
ก็จะได้ผลลัพธ์ตามที่เราต้องการ