การจัดการ configuration สำหรับแต่ละ environment ของ Laravel PHP Framework

Laravel มีการจัดการกับ configuration แบบ environment based หรือพูดง่ายๆ ว่าการตั้งค่าที่แบ่งไปตาม  environment ที่ Laravel ทำงานอยู่ ซึ่งคนที่เคยเขียน Codeigniter ( CI: Handling Multiple Environment ) น่าจะคุ้นเคยดีสำหรับการจัดการ configuration แบบ environment based


การตั้งค่าแบบ environment based ใน Laravel ก็เริ่มต้นจากการสร้างโฟลเดอร์ชื่อเดียวกันกับ environment ที่เราตั้งการ เช่น กำลังรันบนเครื่อง local ของเราเอง ก็ให้สร้างโฟลเดอร์ชื่อ local  ไว้ใน app/config ครับ จากนั้น ถ้าเราอยากเปลี่ยนค่า config ตอนที่เรารันที่ local ก็ให้สร้างไว้ในโฟลเดอร์ local นี้ครับ เช่น ต้องการเปลี่ยน driver ในการ cache เพราะไม่อยากยุ่งยากในการติดตั้ง memcached  หรือ redis บนเครื่อง local ของเรา ก็สร้างไฟล์ cache.php ที่ใช้ในการตั้งค่า driver และตั้งค่า driver ในไฟล์ ให้เป็น file

ไฟล์ app/config/local/cache.php

<?php

return array(

    'driver' => 'file',

);

พอเราสร้างโฟลเดอร์สำหรับ local ของเราแล้ว จากนั้นเราก็ต้องบอกให้ Laravel รู้ว่าจะต้องใช้ environment อะไร เพราะค่าเริ่มต้น (default) จะมีค่าเป็น production โดยเข้าไปแก้ไขไฟล์ bootstrap/start.php ซึ่งจะมีการเรียกใช้ $app->detectEnvironment ที่ทำหน้าที่ในการเลือกว่าจะใช้ environment อะไร

การตั้งค่าก็ไม่อยากครับ เช่น ถ้าผมต้องการให้ตรวจสอบจากโดเมน dev.imooh.com ให้ใช้ local แต่ถ้าเป็น www.imooh.com ให้ใช้ production ก็ทำได้ดังนี้ครับ

Environment configuration

ส่วนการจะตรวจสอบว่าตอนนี้ใช้ environment  อะไรอยู่นั้น Laravel  ก็มีฟังก์ชัน environment() ของ App ให้เราใช้ครับ

$environment = App::environment();