🌞Service Provider คืออะไร ?
ข้าคือผู้ให้บริการระบบของทุกสรรพสิ่ง
ServiceProvider
ใน Laravel มันเป็นส่วนหนึ่งของระบบที่เราสามารถจัดการระบบและสร้างสิ่งที่เรียกว่า "ผู้ให้บริการ" ให้กับเราได้
เช่น
บริการจัดการ container
บริการเตรียมสิ่งต่างๆก่อนการทำงานของระบบ หรือการกำหนดค่าต่างๆ
อื่นๆ
ซึ่ง มันเป็นส่วนหลักของการทำงานใน Laravel Application ของท่านทั้งหมด
ทุกครั้งที่ Laravel ถูกเรียกใช้งาน เจ้าตัว ServiceProvider ทั้งหมดจะถูกโหลดใช้งานทุกครั้ง เพื่อทำการลงทะเบียน หรือเตรียมชุดข้อมูลของท่าน เพื่อพร้อมสำหรับการทำงานของระบบของท่านต่อไป
นี่คือตัวอย่างไฟล์จาก app/Providers/AppServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
// ตรงนี้คุณสามารถลงทะเบียน หรือเตรียมการข้อมูลของท่านได้
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
// ตรงนี้จะทำงานเมื่อระบบต่างๆ หรือ providers ต่างๆถูกลงทะเบียนแล้ว
}
}
ซึ่งตัวไฟล์นี้มันจะถูกลงทะเบียนให้เรียกใช้งานที่ config/app.php
ท่านสามารถดูเพิ่มเติมได้ที่ https://laravel.com/docs/providers
เอาหละ เรามาลองยกตัวอย่างซักหน่อย
ตัวอย่างการใช้งาน ServiceProvider เบื้องต้น
เมื่อท่านต้องการให้ระบบของท่านมีการถือข้อมูลอะไรก็ตาม เช่น ค่าของ version ของระบบ หรือ ข้อมูลอื่นๆ ที่ท่านต้องการให้ระบบของท่านมีการเรียกใช้งานได้ง่ายๆ
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
// ตรงนี้คุณสามารถลงทะเบียน หรือเตรียมการข้อมูลของท่านได้
$this->app->bind('my-app-version', function () {
return '1.0.0';
});
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//
}
}
อธิบายโค้ดด้านบนเบื้องต้นจาก Lifecycle ของ Laravel
ตอนที่ Laravel ถูกเรียกใช้งาน ตัว AppServiceProvider จะถูกโหลดขึ้นมา
ตอนที่ AppServiceProvider ถูกโหลดขึ้นมา ตัว
register()
จะถูกเรียกใช้งานใน
register()
ท่านสามารถลงทะเบียน หรือเตรียมข้อมูลต่างๆ ได้ในตัวอย่างด้านบน เราได้ลงทะเบียน
my-app-version
ให้กับ container ของ Laravel แล้วตอนที่มีการเรียกใช้งาน
my-app-version
จะได้ค่า1.0.0
กลับมา
เช่น ใน Controller หรือ Blade Template ท่านสามารถเรียกใช้งานได้ดังนี้
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class MyController extends Controller
{
public function index()
{
$version = app('my-app-version'); // <-- ได้ค่า '1.0.0' กลับมา
return $version;
}
}
ข้อแตกต่างระหว่าง register()
และ boot()
register()
และ boot()
register()
จะถูกเรียกใช้งานก่อนที่ Laravel Application จะถูกโหลดขึ้นมา ซึ่งใช้สำหรับการลงทะเบียน หรือเตรียมข้อมูลต่างๆ ให้กับ container ของ Laravelboot()
จะถูกเรียกใช้งานหลังจากที่ Laravel Application ถูกโหลดขึ้นมาแล้ว ซึ่งใช้สำหรับการทำงานต่างๆ หลังจากที่ทุกอย่างถูกโหลดขึ้นมาแล้ว
Reference
Last updated