이러한 기능이 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;
}
그런 다음 기능 클래스를 컨테이너에 바인딩하는 미들웨어를 작성하십시오.
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);
}
}
이 미들웨어를 경로 나 그룹 또는 각 경로에 연결하는 것을 잊지 마십시오.
그런 다음 컨트롤러에서 Features 클래스를 TypeHint 할 수 있습니다.
public function index(Request $request, Features $features)
{
if ($features->isFeature1Enabled()) {
//
}
}