features_controller = $features_controller; $this->feature_flags_repository = $feature_flags_repository; } public function set($name, $value) { if (!$this->features_controller->exists($name)) { throw new \RuntimeException("Feature '$name' does not exist'"); } $this->feature_flags_repository->createOrUpdate(['name' => $name, 'value' => $value]); } public function getAll() { $flags = $this->feature_flags_repository->findAll(); $flagsMap = array_combine( array_map( function (FeatureFlagEntity $flag) { return $flag->getName(); }, $flags ), $flags ); $output = []; foreach ($this->features_controller->getDefaults() as $name => $default) { $output[] = [ 'name' => $name, 'value' => isset($flagsMap[$name]) ? (bool)$flagsMap[$name]->getValue() : $default, 'default' => $default, ]; } return $output; } }