Bu özelliklerin yalnızca HTTP istekleri için gerekli olduğu varsayılarak.
Features
Tüm varsayılan bayrakları ile bir varsayılan temel sınıf oluşturmak istiyorum :
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;
}
}
Sonra her etki alanı için bu sınıfı genişletmek ve bu etki alanı için gereken geçersiz kılmaları ayarlayın:
Class Domain1 extends Features {
// override
protected $feature1_enabled = false;
}
Ardından, özellikler sınıfını kapsayıcıya bağlamak için bir Middleware oluşturun:
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);
}
}
Bu ara katmanı rotalarınıza eklemeyi unutmayın: bir gruba veya her rota için.
Bundan sonra, denetleyicilerinizde Özellikler sınıfınızı TypeHint yapabilirsiniz:
public function index(Request $request, Features $features)
{
if ($features->isFeature1Enabled()) {
//
}
}