[Laravel] วิธีทำ Helper function ไว้ใช้เอง

 ในบทความนี้ผมจะถือว่าทุกคนมีความรู้พื้นฐานเกี่ยวกับ Laravel Framework มาแล้วระดับนึงในเรื่องของโครงสร้างไฟล์ แต่อย่างไรก็ตาม หากสงสัยก็คอมเม้นท์ถามไว้ได้ครับ

มาเริ่มกันเลย

ก่อนอื่นผมจะสร้าง folder ชื่อ Helpers ไว้ภายใต้ folder app ของ framework เพื่อง่ายจ่อการจำแนกไฟล์

จากนั้นสร้างไฟล์ขึ้นมา ตั้งชื่อตามหน้าที่ของ function ด้านในไฟล์นั้น ๆ ในตัวอย่างนี้ผมจะสร้างไฟล์ชื่อว่า NumberHelper.php ไว้จัดการกับตัวเลขต่างๆ

ต่อมาผมจะสร้าง function ชื่อว่า numberInRange ไว้ตรวจเช็คว่าตัวเลขที่ใส่เข้ามามีค่าระหว่าง(between)อีก 2 ตัวเลขหรือไม่ โดยมีเนื้อหาของ function ดังนี้

if (!function_exists('numberInRange')) {
    function numberInRange($val, $min, $max) {
        return ($val >= $min && $val <= $max);
    }
}

function_exists มีไว้เพื่อป้องกันการทับซ้อน function ที่มีอยู่แล้วในโปรเจ็กต์ของเรา
หากไม่มี function จึงค่อยประกาศ function

ถัดมาให้เปิดไฟล์ที่ชื่อว่า composer.json ซึ่งอยู่ที่ root ของโปรเจ็กต์


ในไฟล์ เลื่อนลงจนถึงส่วนของ autoload

เพิ่มโค้ดส่วนนี้ลงไป เพื่อบอกให้โหลดโค้ดจากไฟล์ NumberHelper.php มาใช้ด้วย (อย่าลืมใส่ , ต่อท้าย } ก่อนหน้าด้วย)
"files": [
"app/Helpers/NumberHelper.php"
]
จะออกมาเป็นตามรูป


ต่อมาใช้คำสั่ง composer dumpautoload ใน cmd ที่ root path ของโปรเจ็กต์ เพื่อบอกให้ framework อัพเดทตัวมันเอง
โดยติดโค้ด Helper เข้าไปด้วย ทีนี้ก็ลองทดสอบเรียกใช้ function ที่เพิ่มเข้าไป

แล้วถ้ามี Helper มากกว่า 1 ไฟล์ล่ะ?

ถ้าอิงจากวิธีเดิมถือว่านรกมาก ถ้าเกิดมีเพิ่ม 10 ไฟล์ เราต้องเพิ่มไฟล์ใน composer.json ถึง 10 บรรทัด
และหากมีเพิ่มอีกก็ต้องมากรอกโค้ดเองต่อไปเรื่อย ๆ ไม่จบไม่สิ้น เพราะฉะนั้นเราจะมาทำอีกวิธี

ภายใต้ folder Helpers ให้สร้างไฟล์ชื่อว่า autoload.php ขึ้นมาตามนี้


และใส่โค้ดในไฟล์ตามนี้
<?php

$files = glob(__DIR__ . "/*Helper.php");
foreach ($files as $file) {
    $filename = (string) $file;

    if (strpos($filename, 'Helper.php') !== false) {
        require_once $filename;
    }
}

โดย function glob จะเป็นการค้นหาไฟล์ที่ชื่อมี pattern ตามที่เรา input เข้าไป โดย return ออกมาเป็น array
ของชื่อไฟล์ที่ตรงกับเงื่อนไข ณ ที่นี้เรากำลังหาไฟล์ที่ลงท้ายด้วย Helper.php จากนั้นมาวน loop เพื่อ require file
ทั้งหมดเข้ามาในโค้ดเรา


จากนี้ไปแก้ที่ไฟล์ composer.json ให้เป็น
"files": [
"app/Helpers/autoload.php"
]
และอย่าลืมคำสั่ง composer dumpautoload เพื่อรีเฟรชโค้ดด้วย จากนี้ไปเราก็ไม่ต้องกลัวว่าเราจะมี Helper กี่ไฟล์แล้ว
ขอแค่ไฟล์นั้น ๆ ลงท้ายด้วย Helper.php ก็เป็นอันจบครับ

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

[Blue Archive] รวมล็อบบี้ความทรงจำ (Live2D)

[Blue Archive] รีวิวชินัตสึ (Chinatsu)

[Blue Archive] รีวิวมารินะ (Marina)

[Blue Archive] รีวิวสึมิเระ (Sumire)

[Arknights] รีวิว Penance