This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
symfony/src/Symfony/Component/ExpressionLanguage
Nicolas Grekas 7185d50649 Merge branch '2.6' into 2.7
* 2.6: (24 commits)
  [Form] fixed a maxlength overring on a guessing
  [Debug] Show only unique class candidates
  [SecurityBundle] Firewall providers building - code cleaning
  [Filesystem] symlink use RealPath instead LinkTarget
  [DependencyInjection] Remove duplicate  declaration in PhpDumper
  terminals are not interactive on Travis
  Revert "[DependencyInjection] backport perf optim"
  [WebProfiler] Tweaked ajax requests toolbar css reset
  [WebProfilerBundle] replaced pattern to path attribute in routes definitions.
  fix phpdoc's alignment
  Fix missing addExpressionLanguageProvider (used by service container to add expression providers)
  Fixed the AuthenticationProviderInterface alignment
  Fixed the proxy-manager version constraint
  Fix missing space in label_attr
  fix DumpDataCollectorTest after CS changes
  avoid risky tests
  Fixed typo in SecurityContext PHPDoc
  [FrameworkBundle][Template name] avoid  error message for the shortcut notation.
  [DependencyInjection] perf optim: call dirname() at most 5x
  [DependencyInjection] backport perf optim
  ...
2014-12-12 17:23:01 +01:00
..
Node [2.5] Remove possible call_user_func() 2014-11-21 10:52:15 +01:00
ParserCache Fixed typos 2013-11-09 12:55:32 +01:00
Resources/bin [ExpressionLanguage] fixed typo 2013-10-04 11:41:51 +02:00
Tests [2.6] CS Fixes And Removed An Unused Import 2014-12-07 19:23:39 +01:00
.gitignore [ExpressionLanguage] added the component 2013-09-19 12:59:10 +02:00
CHANGELOG.md [ExpressionLanguage] added ExpressionFunction and ExpressionFunctionProviderInterface 2014-09-25 19:08:38 +02:00
Compiler.php [ExpressionLanguage] added the component 2013-09-19 12:59:10 +02:00
composer.json updated version to 2.7 2014-11-10 19:00:54 +01:00
Expression.php added optimized versions of expressions 2013-09-19 12:59:12 +02:00
ExpressionFunction.php [2.6] CS Fixes And Removed An Unused Import 2014-12-07 19:23:39 +01:00
ExpressionFunctionProviderInterface.php [ExpressionLanguage] added ExpressionFunction and ExpressionFunctionProviderInterface 2014-09-25 19:08:38 +02:00
ExpressionLanguage.php [2.6] CS Fixes And Removed An Unused Import 2014-12-07 19:23:39 +01:00
Lexer.php [ExpressionLanguage] Fixed an issue with # characters in double quoted string literals 2014-07-22 15:26:34 +02:00
LICENSE udpated LICENSE year 2014-01-07 14:29:32 +01:00
ParsedExpression.php added optimized versions of expressions 2013-09-19 12:59:12 +02:00
Parser.php compare version using PHP_VERSION_ID 2014-11-23 21:10:39 +01:00
phpunit.xml.dist Adjust error_reporting to allow deprecation messages for 3.0 2014-11-29 13:40:43 +01:00
README.md Added missing parameter to the compile function 2013-11-08 16:59:08 +01:00
SerializedParsedExpression.php Removed dead code (unused use statements). 2013-10-16 13:59:56 +02:00
SyntaxError.php [ExpressionLanguage] added the component 2013-09-19 12:59:10 +02:00
Token.php CS fixes 2014-12-04 20:26:11 +00:00
TokenStream.php unify constructor initialization style throughout symfony 2013-11-11 19:40:07 +01:00

ExpressionLanguage Component

The ExpressionLanguage component provides an engine that can compile and evaluate expressions:

use Symfony\Component\ExpressionLanguage\ExpressionLanguage;

$language = new ExpressionLanguage();

echo $language->evaluate('1 + foo', array('foo' => 2));
// would output 3

echo $language->compile('1 + foo', array('foo'));
// would output (1 + $foo)

By default, the engine implements simple math and logic functions, method calls, property accesses, and array accesses.

You can extend your DSL with functions:

$compiler = function ($arg) {
    return sprintf('strtoupper(%s)', $arg);
};
$evaluator = function (array $variables, $value) {
    return strtoupper($value);
};
$language->register('upper', $compiler, $evaluator);

echo $language->evaluate('"foo" ~ upper(foo)', array('foo' => 'bar'));
// would output fooBAR

echo $language->compile('"foo" ~ upper(foo)');
// would output ("foo" . strtoupper($foo))

Resources

You can run the unit tests with the following command:

$ cd path/to/Symfony/Component/ExpressionLanguage/
$ composer.phar install --dev
$ phpunit