src/Services/Switcher/FeatureStateEvaluator.php line 31

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Slivki\Services\Switcher;
  4. use Exception;
  5. use Psr\Log\LoggerInterface;
  6. use Slivki\Entity\ServerFeatureState;
  7. use Slivki\Entity\User;
  8. use Slivki\Services\UserGetter;
  9. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  10. use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
  11. final class FeatureStateEvaluator
  12. {
  13.     private ParameterBagInterface $parameterBag;
  14.     private LoggerInterface $logger;
  15.     private UserGetter $userGetter;
  16.     public function __construct(
  17.         ParameterBagInterface $parameterBag,
  18.         LoggerInterface $logger,
  19.         UserGetter $userGetter
  20.     ) {
  21.         $this->parameterBag $parameterBag;
  22.         $this->logger $logger;
  23.         $this->userGetter $userGetter;
  24.     }
  25.     public function evaluate(ServerFeatureState $serverFeatureState): bool
  26.     {
  27.         $expressionLanguage = new ExpressionLanguage();
  28.         $user $this->userGetter->find();
  29.         try {
  30.             return $expressionLanguage->evaluate(
  31.                 $serverFeatureState->getEligibilityRule(),
  32.                 [
  33.                     'config' => $this->parameterBag->all(),
  34.                     'user' => $user ?? new User(),
  35.                 ]
  36.             );
  37.         } catch (Exception $exception) {
  38.             $this->logger->error('Server feature state does not exist. Feature may works incorrectly.', [
  39.                 'exception' => $exception,
  40.             ]);
  41.         }
  42.         return false;
  43.     }
  44. }