これらの機能は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()) {
//
}
}