สมมติว่าฟีเจอร์เหล่านั้นจำเป็นสำหรับการร้องขอ HTTP เท่านั้น
ฉันจะสร้างFeatures
คลาสพื้นฐานเริ่มต้นด้วยค่าสถานะเริ่มต้นทั้งหมด:
Class Features {
// Defaults
protected $feature1_enabled = true;
protected $feature2_enabled = true;
public function isFeature1Enabled(): bool
{
return $this->feature1_enabled;
}
public function isFeature2Enabled(): bool
{
return $this->feature2_enabled;
}
}
จากนั้นฉันจะขยายคลาสนั้นสำหรับแต่ละโดเมนและตั้งค่าการแทนที่ที่จำเป็นสำหรับโดเมนนั้น:
Class Domain1 extends Features {
// override
protected $feature1_enabled = false;
}
จากนั้นสร้าง Middleware เพื่อเชื่อมโยงฟีเจอร์คลาสเข้ากับคอนเทนเนอร์:
class AssignFeatureByDomain
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
switch ($_SERVER['HTTP_HOST']) {
case 'domain1':
app()->bind(Features::class, Domain1::class);
break;
default:
abort(401, 'Domain rejected');
}
return $next($request);
}
}
อย่าลืมแนบมิดเดิลแวร์นี้กับเส้นทางของคุณ: ไปยังกลุ่มหรือสำหรับแต่ละเส้นทาง
หลังจากนี้คุณสามารถพิมพ์คำแนะนำระดับคุณลักษณะของคุณในตัวควบคุมของคุณ:
public function index(Request $request, Features $features)
{
if ($features->isFeature1Enabled()) {
//
}
}