Neos\Flow\Security\Authorization\Privilege\Entity\Doctrine\EntityPrivilegeExpressionEvaluator::evaluate PHP Метод

evaluate() публичный Метод

Evaluate an expression under a given context
public evaluate ( string $expression, Context $context ) : mixed
$expression string
$context Neos\Eel\Context
Результат mixed
    public function evaluate($expression, Context $context)
    {
        $expression = trim($expression);
        $identifier = md5($expression);
        $functionName = 'expression_' . $identifier;
        if (!function_exists($functionName)) {
            $code = $this->generateEvaluatorCode($expression);
            $functionDeclaration = 'function ' . $functionName . '($context){return ' . $code . ';}';
            $this->newExpressions[$functionName] = $functionDeclaration;
            eval($functionDeclaration);
        }
        $result = $functionName($context)->unwrap();
        $entityType = $context->unwrap()->getEntityType();
        return ['entityType' => $entityType, 'conditionGenerator' => $result];
    }

Usage Example

 /**
  * @test
  * @dataProvider expressions
  *
  * @param $expression
  */
 public function evaluatingSomeExpressionWorks($expression, $expectedSqlCode)
 {
     $context = new Eel\Context(new ConditionGenerator());
     $evaluator = new EntityPrivilegeExpressionEvaluator();
     $result = $evaluator->evaluate($expression, $context);
     $entityManager = $this->objectManager->get(ObjectManager::class);
     $sqlFilter = new SqlFilter($entityManager);
     $this->assertEquals(Fixtures\RestrictableEntity::class, $result['entityType']);
     $this->assertEquals($expectedSqlCode, $result['conditionGenerator']->getSql($sqlFilter, $entityManager->getClassMetadata(Fixtures\RestrictableEntity::class), 't0'));
 }
EntityPrivilegeExpressionEvaluator