@@ -16,13 +16,16 @@ class ArgumentValidator implements ArgumentValidatorInterface
16
16
{
17
17
private $ containerBuilder ;
18
18
private $ resultingClassResolver ;
19
+ private $ evaluateExpressions ;
19
20
20
21
public function __construct (
21
22
ContainerBuilder $ containerBuilder ,
22
- ResultingClassResolverInterface $ resultingClassResolver
23
+ ResultingClassResolverInterface $ resultingClassResolver ,
24
+ $ evaluateExpressions = false
23
25
) {
24
26
$ this ->containerBuilder = $ containerBuilder ;
25
27
$ this ->resultingClassResolver = $ resultingClassResolver ;
28
+ $ this ->evaluateExpressions = $ evaluateExpressions ;
26
29
}
27
30
28
31
public function validate (\ReflectionParameter $ parameter , $ argument )
@@ -88,10 +91,26 @@ private function validateExpressionArgument($className, Expression $expression,
88
91
{
89
92
$ expressionLanguage = new ExpressionLanguage ();
90
93
94
+ $ this ->validateExpressionSyntax ($ expression , $ expressionLanguage );
95
+
96
+ if ($ this ->evaluateExpressions ) {
97
+ $ this ->validateExpressionResult ($ className , $ expression , $ allowsNull , $ expressionLanguage );
98
+ }
99
+ }
100
+
101
+ private function validateExpressionSyntax (Expression $ expression , ExpressionLanguage $ expressionLanguage )
102
+ {
91
103
try {
92
- $ result = $ expressionLanguage ->evaluate ($ expression , array ('container ' => $ this -> containerBuilder ));
104
+ $ expressionLanguage ->parse ($ expression , array ('container ' ));
93
105
} catch (SyntaxError $ exception ) {
94
106
throw new InvalidExpressionSyntaxException ($ expression , $ exception );
107
+ }
108
+ }
109
+
110
+ private function validateExpressionResult ($ className , Expression $ expression , $ allowsNull , ExpressionLanguage $ expressionLanguage )
111
+ {
112
+ try {
113
+ $ result = $ expressionLanguage ->evaluate ($ expression , array ('container ' => $ this ->containerBuilder ));
95
114
} catch (\Exception $ exception ) {
96
115
throw new InvalidExpressionException ($ expression , $ exception );
97
116
}
0 commit comments