coduo/php-matcher
Flexible PHP pattern-matching library for testing and validating complex data structures. Compare arrays, JSON and objects against readable expectations, with rich mismatch descriptions to pinpoint differences. Useful for API response assertions and custom validation rules.
matcher()->match($data, $pattern)) continues to fit service-layer, command-bus, and API validation patterns.HttpFoundation) improves integration with Laravel’s HTTP stack (e.g., Illuminate\Http\Request).symfony/http-client.Illuminate/Foundation uses Symfony HttpKernel). Example:
use Symfony\Component\HttpFoundation\Request;
$matcher->match($request->toArray(), ['query' => ['page' => 'integer']]);
['id' => 'int']) or enums for stricter validation.array_unpack or fn() improvements for cleaner DI.5.x branch.array_is_list or Stringable may enable richer pattern syntax (e.g., ['name' => 'string:min:3']).Doctrine components could improve Eloquent collection validation.| Risk Area | Mitigation Strategy | Update for 6.0.18 |
|---|---|---|
| Performance Overhead | Benchmark against native PHP/PCRE; cache compiled patterns. | PHP 8.5’s JIT may improve performance—re-test critical paths. |
| Pattern Complexity | Document edge cases (e.g., recursive structures). | Symfony 8.0’s Attribute system could enable annotated patterns (future-proofing). |
| Dependency Bloat | Audit for transitive dependencies (e.g., symfony/yaml). |
Symfony 8.0 components are now explicitly allowed; audit for symfony/options-resolver. |
| Maintenance Burden | Align with Laravel LTS (test against Laravel 11+). | PHP 8.5 support ensures compatibility with upcoming Laravel releases. |
| Security | Validate patterns at runtime to prevent injection. | Symfony 8.0’s Stringable may reduce XSS risks in dynamic patterns. |
| PHP Version Risk | NEW: Breaking for PHP < 8.3—migrate or pin to 5.x branch. |
Validator for complex nested data? Symfony 8.0 compatibility may overlap with Laravel’s built-in validation.['status' => Status::Active])?App\Exceptions\Handler?TestCase for pattern assertions?Validator (now with Symfony 8.0 under the hood).Illuminate/Foundation’s Symfony-based HTTP stack (e.g., validate Request objects using Symfony\Component\HttpFoundation\Request).enum UserRole { ADMIN, EDITOR }
$pattern = ['role' => UserRole::ADMIN];
$pattern = ['metadata' => ['tags' => 'array<int, string>']];
ValidateRequests middleware for API gateways.symfony/http-client or symfony/validator.composer.json with ^6.0; register as a service provider.Matcher::match($data, ['key' => 'string'])).// Before (Symfony Validator)
$validator->validate($data, [
'email' => 'email',
'role' => new UserRoleEnum(),
]);
// After (php-matcher)
$matcher->match($data, [
'email' => 'string:email',
'role' => UserRole::ADMIN,
]);
Assert for pattern validation:
use Symfony\Component\Validator\Assert;
Assert::isValidPattern($pattern, $data);
5.x branch (PHP < 8.3 not supported in 6.0.x).symfony/options-resolver). Use composer why symfony to detect.ext-xml or spatie/array-to-object if parsing non-JSON data.UserRole:: suggestions).| Phase | Task | Tools/Libraries | Update for 6.0.18 |
|---|---|---|---|
| Discovery | Audit for Symfony Validator or Laravel Validator usage. | git grep, phpstan |
Prioritize Laravel 11+/Symfony 8.0 projects. |
| Setup | Install ^6.0; configure service provider. |
Composer, Laravel Service Provider | Ensure PHP 8.5+ runtime. |
| Pilot | Replace Symfony Validator rules in a feature branch. | PHP |
How can I help you explore Laravel packages today?