symfony/expression-language
Symfony ExpressionLanguage provides an engine to compile and evaluate one-line expressions that return values (often booleans). Use it to embed simple, safe business rules and conditions in your app, with support for custom functions and variables.
authorization package). Supports dependency injection and configuration-driven setups.eval() risks by compiling expressions to static PHP and enforcing variable whitelisting. Critical for Laravel apps handling user-provided rules (e.g., admin panels) or sensitive logic (e.g., payments).if chains for critical workflows.ExpressionLanguageServiceProvider) to bind it to the container.laravel-expression-language) for consistency with other Symfony components (e.g., laravel-http-kernel).User, Request) to expressions. Example:
$expressionLanguage->addProvider(new UserProvider());
$expressionLanguage->addProvider(new RequestProvider());
user.role === 'admin' || user.hasPermission('edit')), but may need documentation for Laravel-specific use cases (e.g., accessing request()->input()).user, request, auth).debug() method to dump parsed AST.dd() with expression results.Gate + Policy)?if chains in Policy classes with expressions (e.g., auth()->user()->role === 'admin' && request()->path()->startsWith('/admin')).user()->isPremium() && request()->is('api'))."email || phone").permissions, feature_flags) and hydrate them at runtime:
$rule = Rule::find($id);
$expressionLanguage->evaluate($rule->expression, ['user' => auth()->user()]);
if checks with expressions (e.g., user()->isBetaTester()).$this->app->singleton(ExpressionLanguage::class, function ($app) {
$language = new ExpressionLanguage();
$language->addProvider(new UserProvider());
$language->addProvider(new RequestProvider());
return $language;
});
Expression facade for convenience:
use Illuminate\Support\Facades\Expression;
if (Expression::evaluate('user()->isAdmin()')) { ... }
laravel-expression-language package with:
ExpressionValidator).expression and variables columns to relevant tables (e.g., permissions, workflows).Schema::create('permissions', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->text('expression'); // e.g., "user.role === 'admin' && request()->is('admin/*')"
$table->json('variables')->nullable(); // Whitelisted vars
});
?.).symfony/polyfill-php80 for str_contains).User, Request).config('features.enabled') with dynamic expressions.ExpressionMiddleware).ExpressionValidator to form requests.How can I help you explore Laravel packages today?