gosuperscript/schema
A Laravel package for building Schema.org structured data with a fluent PHP API. Generate JSON-LD for articles, products, organizations, breadcrumbs, and more, making it easy to add rich search results to your application. Clean, configurable output for SEO-friendly pages.
Since there is no prior assessment, treat this as a baseline review of gosuperscript/axiom at v0.6.10.
"gosuperscript/axiom": "0.6.10" rather than floating on ^0.6 until you have re-run your own rule tests.compare/v0.6.9...v0.6.10); the accompanying tests are the best specification of the new semantics — they show exactly which expression was previously resolving to an equality overload and now resolves to a presence one.Wrap the package behind your own rule/decision service. Do not scatter calls to the package across controllers and form requests. A thin App\Support\Rules\RuleEvaluator (or similar) that takes a definition + payload and returns a result keeps the blast radius of future operator-resolution changes contained to one class.
Be explicit about operator intent. The whole point of v0.6.10 is that two operator families can overlap. In your own definitions and custom overloads, prefer distinct, self-describing operator names over ones that could be read as either a presence check or an equality check. Ambiguity is what the package now has to arbitrate for you — don't rely on it.
Register overloads in one place. If you extend the package with custom operators/overloads, register them in a single service provider method rather than inline. That gives you one file to audit whenever operator precedence changes (as it did here).
Test with data providers. For each rule you ship, add a table-driven test covering: field absent, field present with a null value, field present with a matching value, field present with a non-matching value. The absent/null/present distinction is precisely where presence-vs-equality resolution shows up, so these cases are your regression net.
Compile once, evaluate many times. If the package supports compiling or parsing a rule definition, do that at boot/config time or cache it — evaluate the compiled form per request. This is the standard pattern for rule engines and it also makes the resolution behaviour deterministic and inspectable.
Integrate at the boundaries you already have. Validation rules, form requests, and authorization policies are the natural seams. For validation, implement ValidationRule (or a Rule closure) that delegates to your evaluator so failures surface as normal Laravel validation messages rather than raw package exceptions.
$request->validated() or $request->all(), remember Laravel will include keys with null values but omit genuinely missing ones — that difference is now semantically meaningful.0.6.x is pre-1.0. Patch releases can carry semantic changes like this one. Treat every bump as requiring a full test run, and avoid ^0.6 in composer.json for anything production-critical until you've pinned and verified.vendor:publish --force into a diff and merge deliberately.How can I help you explore Laravel packages today?