Symfony Tutorial on Symfony Expression

as we discussed earlier, expression language is one of the salient features of symfony application. symfony expression is mainly created to be used in a configuration environment. it enables a non-programmer to configure the web application with little effort. let us create a simple application to test an expression.

step 1 − create a project, expression-language-example.

cd /path/to/dir 
mkdir expression-language-example 
cd expression-language-example 
composer require symfony/expression-language 

step 2 − create an expression object.

use symfony\component\expressionlanguage\expressionlanguage; 
$language = new expressionlanguage();

step 3 − test a simple expression.

echo "evaluated value: " . $language->evaluate('10 + 12') . "\r\n" ; 
echo "compiled code: " . $language->compile('130 % 34') . "\r\n" ;

step 4 − symfony expression is powerful such that it can intercept a php object and its property as well in the expression language.

class product { 
   public $name; 
   public $price; 
} 
$product = new product(); 
$product->name = 'cake'; 
$product->price = 10;  

echo "product price is " . $language 
   ->evaluate('product.price', array('product' => $product,)) . "\r\n";  
echo "is product price higher than 5: " . $language 
   ->evaluate('product.price > 5', array('product' => $product,)) . "\r\n"; 

here, the expression product.price and product.price > 5 intercept $product object's property price and evaluate the result.

the complete coding is as follows.

main.php

<?php 
   require __dir__ . '/vendor/autoload.php'; 
   use symfony\component\expressionlanguage\expressionlanguage; 
   $language = new expressionlanguage();  

   echo "evaluated value: " . $language->evaluate('10 + 12') . "\r\n" ; 
   echo "compiled code: " . $language->compile('130 % 34') . "\r\n" ;  
   
   class product { 
      public $name; 
      public $price; 
   }  
   $product = new product(); 
   $product->name = 'cake'; 
   $product->price = 10;  

   echo "product price is " . $language 
      ->evaluate('product.price', array('product' => $product,)) . "\r\n"; 
   echo "is product price higher than 5: " . $language 
      ->evaluate('product.price > 5', array('product' => $product,)) . "\r\n"; 
?> 

result

evaluated value: 22 
compiled code: (130 % 34) 
product price is 10 
is product price higher than 5: 1