Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message
Expression Language

Expression Language Laravel Package

symfony/expression-language

Symfony ExpressionLanguage provides a fast engine to evaluate and compile simple one-line expressions (often boolean rules). Use it to embed dynamic conditions, calculations, and access to variables/functions in a safe, extensible way.

View on GitHub
Deep Wiki
Context7

Provides an engine that can compile and evaluate expressions

Frequently asked questions about Expression Language
How do I integrate Symfony ExpressionLanguage into a Laravel 10+ project?
Add the package via Composer: `composer require symfony/expression-language`. No Laravel-specific wrappers are needed—it works out-of-the-box with PHP 8.1+. Register the service in `AppServiceProvider` if you need caching or dependency injection. Example: `$expressionLanguage = new ExpressionLanguage();`
Can I use this for dynamic access control rules in Laravel?
Yes. ExpressionLanguage is ideal for evaluating boolean rules like `'user.role == 'admin' && request.method == 'POST'`. Compile expressions once (e.g., in a service) and cache the result for performance. Example: `$compiled = $expressionLanguage->compile($rule); $result = $compiled->evaluate($context);`
What Laravel versions and PHP versions does this package support?
Symfony ExpressionLanguage requires PHP 8.1+ and works seamlessly with Laravel 10+. It’s fully compatible with Laravel’s service container and PSR standards. No version-specific Laravel dependencies exist—just ensure your project meets the PHP 8.1+ requirement.
How do I cache compiled expressions in Laravel to avoid recompilation?
Cache the compiled Closure, not the ExpressionLanguage object. Example: `Cache::remember('expr_'.$expression, now()->addHours(1), fn() => $expressionLanguage->compile($expression));`. Avoid serializing the entire ExpressionLanguage instance—cache only the compiled result.
Is Symfony ExpressionLanguage secure for user-provided input?
Yes, but validate input strictly. The package is designed for safe evaluation, but user-provided expressions should be sanitized (e.g., whitelist allowed functions/variables). Use the new PHPStan rule (`symfony/expression-language:unsafeUnserialize`) to detect unsafe serialization practices in your CI pipeline.
What’s the performance impact of compiling expressions in Laravel?
Compilation is a one-time cost—cache the result for repeated use. Benchmarks show negligible overhead for typical use cases (e.g., access control rules). For high-frequency evaluations, pre-compile expressions during bootstrapping (e.g., in `AppServiceProvider`).
Can I extend ExpressionLanguage to add custom functions or variables?
Absolutely. Use `ExpressionLanguage::addFunction()` or `ExpressionLanguage::addProvider()` to register custom logic. Example: `$expressionLanguage->addFunction('isActive', fn($user) => $user->isActive());`. This is useful for domain-specific logic in Laravel apps.
How does this compare to Laravel’s built-in `Str::of()` or Blade conditionals?
ExpressionLanguage is more powerful for dynamic, reusable logic. Unlike Blade (template-only) or `Str::of()` (string manipulation), it evaluates complex expressions (e.g., `'order.status == 'shipped' && order.value > 100'`). Use it for business rules, validation, or conditional logic outside views.
Are there any threading or concurrency concerns in Laravel?
No. Symfony ExpressionLanguage is thread-safe in PHP 8.1+. It’s stateless during evaluation, so concurrent requests won’t interfere. Cache compiled expressions per request if needed, but the package itself handles parallel execution safely.
How do I test ExpressionLanguage in Laravel unit tests?
Mock the `ExpressionLanguage` instance or use a real one in tests. Example: `$expressionLanguage = new ExpressionLanguage(); $result = $expressionLanguage->evaluate('user.role == admin', ['user' => $user]);`. Test edge cases like invalid syntax or malicious input with `expectException(SyntaxErrorException)`.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
calmfox/watch-sylius
damienfern/grpc-symfony-bundle
atoolo/index-bundle
atoolo/genai-bundle
coprotoai/laravel-ticket
davidjln/llm-carbon-bundle
cryonighter/valid-request-bundle
coolms/taxonomy-bundle
coolms/field-bundle
articulate-orm/symfony
aaix/laravel-tall-architect
ephoto/akeneo-connector
emmanuelballery/eb-plantumlbundle
emielburgman/symfony-visitor-beacon
emielburgman/symfony-visit-storage
emielburgman/symfony-security-headers
emielburgman/symfony-log-viewer
emarref/xdebug-bundle
emarref/pubnub-bundle
elriseio/finance-money-bundle