Laravel 7 : ส่งผลลัพธ์ให้ View แสดงผล

หลังจากประมวลผลได้ผลลัพธ์ที่ต้องการแล้ว แทนที่จะส่งผลออกหน้าเว็บโดยตรงจาก Controller แนะนำให้ส่งผลลัพธ์ที่ได้ไปยังส่วน View เพื่อทำหน้าที่แสดงผลออกหน้าเว็บ

ใน Laravel จะใช้ Blade ทำหน้าที่เป็น Template Engine เพื่อช่วยในการแสดงผลได้ง่ายขึ้น โดยจะมีฟังก์ชันเพื่ออำนวยความสะดวกต่อการแสดงผลออกหน้าเว็บ

ลองมาดูวิธีการใช้งาน View ของ Laravel เบื้องต้นกัน

เรียกใช้ฟังก์ชัน view()

แก้ไขเมธอด contact() ในไฟล์ PageController.php ให้ไปเรียกฟังก์ชัน view() เพื่อแสดงผล

ค่าพารามิเตอร์ของฟังก์ชัน view() คือชื่อไฟล์ view ที่จะใช้แสดงผล เช่นในที่นี้กำหนดเป็น contact

<?php
// app/Http/Controllers/PageController.php

// ...
class PageController extends Controller
{
    // ...
    public function contact()
    {
        return view('contact');
    }
}

ขั้นต่อไปเป็นการสร้างไฟล์ view เก็บไว้ในโฟลเดอร์ resources/views/

รูปแบบการตั้งชื่อไฟล์โดยใช้ Blade Template คือใช้ชื่อพารามิเตอร์ที่ระบุไว้ในฟังก์ชัน view() เช่น contact ตามด้วย .blade.php เช่นในที่นี้เราเรียกฟังก์ชัน view('contact') ก็ต้องระบุชื่อไฟล์ Blade Template เป็น resources/views/contact.blade.php

ตัวอย่างไฟล์ resources/views/contact.blade.php

<html>
<body>
Contact Us from View
</body>
</html>

ทดลองใช้คำสั่ง curl เพื่อทดสอบ ก็จะได้ผลลัพธ์ ที่ส่งมาจากส่วน view

$ curl http://blog.test/contact
<html>
<body>
Contact Us from View
</body>
</html>

ในทำนองเดียวกัน สามารถแก้ไขเมธอด home() เพื่อส่งไปให้ส่วน view แสดงผล

แก้ไขเมธอด home() ในไฟล์ PageController.php

// app/Http/Controllers/PageController.php
// ...
class PageController extends Controller
{
    public function home()
    {
        return view('home');
    }

สร้างไฟล์ resources/views/home.blade.php เพื่อแสดงผล

<html>
<body>
Hello from View
</body>
</html>

ทดสอบด้วยคำสั่ง curl

$ curl http://blog.test/
<html>
<body>
Hello from View
</body>
</html>

สร้างไฟล์โครงสร้างหลัก Layout

จากตัวอย่างด้านบน จะเห็นว่าเมื่อเราสร้างไฟล์ view เพิ่มขึ้นเรื่อยๆ จะมีโค้ดบางส่วนที่เป็นโครงสร้างหลัก (Layout) ของเว็บที่ซ้ำซ้อน ซึ่งเราสามารถแยกส่วนนี้ออกมาเป็นไฟล์โครงสร้างหลักได้ ในที่นี้ขอใช้ชื่อเป็น app.blade.php

ตัวอย่างไฟล์ resources/views/app.blade.php เพื่อทำหน้าที่เป็นโครงสร้างหลักของหน้าเว็บ

<html>
<body>
    @yield('content')
</body>
</html>

คำอธิบาย

  • @yield('content') จะรอรับค่าตัวแปรที่จะแสดงผล จากไฟล์ view อื่นๆ ที่มาเรียกใช้ไฟล์โครงสร้างหลักนี้

แก้ไขไฟล์ contact.blade.php เพื่อเรียกใช้ไฟล์ view ที่ทำหน้าที่เป็นโครงสร้างหลัก

@extends('app')

@section('content')
Contact Us from View
@endsection

คำอธิบาย

  • @extends('app') ระบุไฟล์โครงสร้างหลักที่จะใช้ ในที่นี้ระบุเป็น app ซึ่งเป็นการเรียกใช้ไฟล์ app.blade.php
  • @section และ @endsection จะกำหนดค่าตัวแปร ในที่นี้คือ content เพื่อใช้ส่งค่าเข้าไปแสดงผลในส่วน @yield ในไฟล์โครงสร้างหลัก

ทดสอบด้วยคำสั่ง curl

$ curl http://blog.test/contact
<html>
<body>
    Contact Us from View
</body>
</html>

แก้ไขไฟล์ home.blade.php

@extends('app')

@section('content')
Hello from View
@endsection

ทดสอบด้วยคำสั่ง curl

$ curl http://blog.test/
<html>
<body>
    Hello from View
</body>
</html>

ตอนนี้ทั้ง contact และ home ใช้ไฟล์โครงสร้างหลักเดียวกันแล้ว ทีนี้ถ้าเราต้องการเพิ่มเติมการแสดงผลในส่วนของ <title> ก็สามารถแก้ไขไฟล์โครงสร้างหลัก app.blade.php แค่ไฟล์เดียว โดยเพิ่มการรับค่าตัวแปร title

ตัวอย่างการแก้ไขไฟล์ resources/views/app.blade.php

<html>
<head>
    <title>@yield('title')</title>
<head>
<body>
    @yield('content')
</body>
</html>

แก้ไขไฟล์ contact.blade.php

@extends('app')

@section('title', 'Contact')

@section('content')
Contact Us from View
@endsection

ทดสอบด้วยคำสั่ง curl

$ curl http://blog.test/contact
<html>
<head>
    <title>Contact</title>
</head>
<body>
    Contact Us from View
</body>
</html>

สามารถแก้ไข home.blade.php ได้เหมือมกัน

resources/views/home.blade.php

@extends('app')

@section('title', 'Home')

@section('content')
Hello from View
@endsection

ทดสอบด้วยคำสั่ง curl

$ curl http://blog.test/
<html>
<head>
    <title>Home</title>
</head>
<body>
    Hello from View
</body>
</html>

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

Laravel View File