Weave 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

Api Platform Extensions Bundle Laravel Package

webstack/api-platform-extensions-bundle

A Symfony bundle that extends API Platform with reusable helpers for resource configuration, filtering, serialization, and common API patterns, helping teams build consistent REST and GraphQL APIs with less boilerplate.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • The package is a Symfony bundle, not a Laravel package. It registers Doctrine ORM filters for API Platform via Symfony DI service tags (api_platform.doctrine.orm.query_extension.collection). A Laravel application cannot consume it as-is.
  • Doctrine ORM is shared between the two ecosystems, so the filter logic is portable; the wiring is not. API Platform's Laravel integration (3.x) has its own filter registration mechanism.
  • Scope is narrow and well-bounded: a UUID filter, an "OR search" filter (multiple properties matched with OR instead of AND), and a global search filter. This is roughly a few hundred lines of filter classes — the kind of code that is cheap to read and reimplement.
  • Opportunity score of 12.72 with 2 stars and 0 dependents reflects a bundle published by an agency for its own projects, not an ecosystem component.

Integration feasibility

  • Requires API Platform (likely 3.x, given the March 2023 release) plus Symfony 5.4/6.x. Composer resolution inside a Laravel app will conflict with illuminate/* constraints or drag in a parallel Symfony stack.
  • Realistic paths, in order of preference:
    1. Reimplement the three filters natively against API Platform for Laravel / Eloquent query builders.
    2. Vendor fork the filter classes into a private package, rewriting only the service registration.
    3. Use as-is — only viable if the target service is already Symfony + API Platform, in which case the "Laravel" framing is wrong.
  • No published test suite visibility, no CI badge signal, no documentation beyond a README. Expect to validate behavior empirically.

Technical risk

  • Abandonment risk: high. Single release in 2023, no activity since, 0 dependents, 2 stars. No security response path.
  • Silent no-op risk: high. A filter that fails to register does not error — it returns unfiltered results. For a UUID filter on a tenant or resource identifier, that is a data-exposure class bug, not a UX bug.
  • Version-drift risk: medium. API Platform moved filter base classes from ApiPlatform\Core\Bridge\Doctrine\Orm\Filter to ApiPlatform\Doctrine\Orm\Filter in 3.0. Any upgrade path lands on us.
  • Query-construction risk: medium. OR-combined search filters frequently concatenate DQL fragments; must audit for parameter binding vs. raw string interpolation.

Key questions

  • Is the consuming service actually Laravel, or Symfony + API Platform? The answer changes the recommendation entirely.
  • Which API Platform major version is targeted, and does the code reference ApiPlatform\Core\* or ApiPlatform\* namespaces?
  • How are UUIDs stored — BINARY(16), native uuid, or CHAR(36)? The filter must match, or it returns empty sets.
  • What is the expected row count and query rate for global search? This determines whether LIKE '%term%' is acceptable at all.
  • Is there any test coverage in the repo we can inherit, or are we starting from zero?

Integration Approach

Stack fit

  • Laravel: poor fit at the package level, acceptable at the pattern level. The value here is the design (OR-search and global-search filters), not the artifact.
  • Symfony + API Platform: good fit, with the caveat that you inherit an unmaintained dependency.
  • Recommendation: treat this repository as reference implementation, not a dependency. Copy the filter semantics into a first-party package we own.

Migration path

  • Step 1 — Extract. Read the three filter classes; they are small. Confirm the DQL they emit and the parameter-binding strategy.
  • Step 2 — Port. For Laravel: implement equivalent query-builder filters registered through API Platform for Laravel's filter mechanism, or as Eloquent scopes if API Platform is not in play.
  • Step 3 — Pin. If forking, publish to a private registry with an explicit api-platform/core version constraint and a composer.json conflict entry for the next major. Do not allow floating constraints.
  • Step 4 — Test. Write contract tests asserting: filter applied → results narrowed; filter malformed → 400; filter absent → unfiltered baseline. The last case is the regression guard against silent no-ops.

Compatibility

  • PHP 8.1+ assumed; verify against the repo's composer.json.
  • Doctrine ORM 2.x. ORM 3.x removes several QueryBuilder APIs that older filters rely on — check before any ORM upgrade.
  • API Platform 3.x namespace conventions; a 2023 release may straddle both.
  • License is MIT — forking and vendoring is unambiguously permitted, provided attribution is retained.

Sequencing

  1. Confirm runtime (Laravel vs. Symfony) and API Platform version — one hour, blocks everything.
  2. Code audit of the three filters: LOC, DQL construction, test presence.
  3. Timebox a spike (1–2 days) proving global search against a realistic dataset.
  4. Decide fork vs. reimplement; if fork, stand up private package + CI before any product code depends on it.
  5. Defer global search to a search backend if the spike shows unacceptable latency.

Operational Impact

Maintenance

  • Effective ownership transfers to us on day one. There is no upstream to patch, and no maintainer to escalate to.
  • Mitigating factor: the surface area is genuinely small and the semantics are stable. A frozen copy of three filter classes is low-churn code — the risk is concentrated in the API Platform upgrade boundary, not in day-to-day operation.
  • Budget roughly 1–2 days per API Platform major upgrade to revalidate filter registration and base-class signatures.

Support

  • No vendor, no community, no issue triage. Internal runbook required: who owns the fork, where it lives, how a patch ships.
  • Documentation must be written by us — the README is not a substitute for a runbook covering filter registration and parameter names.

Scaling

  • This is the primary operational concern. Global search means LIKE '%term%' across N columns, which is a full table scan — no B-tree index helps a leading wildcard.
  • Below ~100k rows this is tolerable. Above that, latency degrades non-linearly and the query becomes a top consumer of connection pool time.
  • Options, in order: (a) cap the searchable column set; (b) add a Postgres pg_trgm GIN index on the searched columns; (c) move to a real search backend (Meilisearch/Typesense via Scout, or OpenSearch) and keep the filter as a thin adapter.
  • OR-search filters also multiply bound parameters (columns × terms). Watch for driver parameter limits on wide schemas.

Failure modes

  • Silent unfiltered response — filter not registered or mistyped; returns full collection. Highest severity; must be caught by contract test.
  • UUID format mismatch — binary vs. string storage returns zero rows with a 200. Looks like "no data," is actually a bug.
  • Unbound DQL interpolation — SQL injection surface if the filter concatenates user input into the query string. Audit before shipping.
  • Parameter explosion — wide schemas plus multi-term queries hit driver limits and return 500s under load.
  • Upgrade breakage — API Platform minor bump renames a base class; filters stop registering; falls back to the first failure mode.

Ramp-up

  • Low. A mid-level engineer familiar with API Platform can read the entire source in under a day.
  • The non-obvious cost is validation, not comprehension: proving correct behavior under UUID type variance, empty search terms, and multi-term OR queries takes longer than reading the code.
  • Onboarding note: because the package is unfamiliar to new hires, the internal fork needs a README that states plainly that it originated as webstacknl/api-platform-extensions-bundle and why it was vendored — otherwise it reads as unexplained legacy code.
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.
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib