Laravel 7 : วิธีการส่งค่าตัวแปรให้ View

ตอนนี้มาดูวิธีการส่งค่าตัวแปรจาก Controller ไปยัง View เพื่อแสดงค่าตัวแปรนั้น ออกทางหน้าเว็บ

เพื่อแยกส่วนของการพัฒนาโปรแกรม หลังจากที่ส่วน Controller ประมวลผลจนได้ค่าที่ต้องการเก็บไว้ในตัวแปร เช่นในเมธอด contact() เราต้องการส่งค่าตัวแปร $address ไปยัง View สามารถทำได้โดยระบุในพารามิเตอร์ที่สองในฟังก์ชัน view()

วิธีการส่งค่าตัวแปรในรูปแบบ Associate Array

แก้ไขเมธอด 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]);
    }
}

วิธีการส่งค่าตัวแปรโดยใช้ฟังก์ชัน compact()

แทนที่จะระบุค่าที่ส่งไปยัง 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

หลังจากรับค่ามาแล้ว วิธีการแสดงค่าตัวแปรใน 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>

ก็จะได้ผลลัพธ์ตามที่เราต้องการ

ข้อมูลเพิ่มเติม

Laravel Pass Variable