Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Add explicit @version special route token support for API major versioning within a single module

Aperta
#550 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
45/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Tranquilla
Stack tecnologico
php
Ambito
api, backend

Direzione di ricerca

Inizia tracciando la gestione di @version in src/Router/PatternCompiler.php, src/Router/RouteBuilder.php, src/Router/RouteDispatcher.php, src/Router/MatchedRoute.php e src/Http/Traits/Request/Route.php; esamina prima i template di DemoApi e le dipendenze #546 e #548. Il lavoro è completato quando le versioni major configurate e supportate corrispondono, i controller consapevoli della versione vengono risolti all’interno di un modulo, i valori della versione rimangono nel contesto della route e i test coprono il matching e la risoluzione.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

routing

Summary

Add API major versioning support based on the explicit special route token:

  • @version

so a single API module can expose multiple major API versions concurrently, such as:

  • /api/v1/posts
  • /api/v2/posts

without treating each version as a separate module.

Why

Quantum needs a clean framework-level API versioning model.

The intended ownership model is:

  • one logical Api module
  • multiple supported API major versions inside that module

With the special route token foundation in place, versioning can be expressed explicitly in route patterns instead of relying on:

  • duplicated route trees
  • positional URL conventions
  • separate modules per version
  • hidden dispatch tricks

Goal

Allow routes to explicitly declare API major version position using:

  • @version

and let the framework treat the matched version as framework-owned route context for version-aware controller resolution.

Proposed Direction

API routes that are versioned should explicitly include:

  • @version

Examples:

$route->get('@version/posts', 'PostController', 'posts');
$route->get('@version/post/[uuid=:any]', 'PostController', 'post');
$route->post('@version/signin', 'AuthController', 'signin');

This should allow URLs such as:

  • /api/v1/posts
  • /api/v2/posts
  • /api/v1/signin

depending on module prefix configuration and supported versions.

Config Direction

Supported API versions should be declared in module config.

A likely shape is:

'Api' => [
    'prefix' => 'api',
    'enabled' => true,
    'versions' => ['v1', 'v2'],
]

The route token:

  • @version

should then match only those configured supported versions.

Controller Resolution Direction

Matched version values should be used by the framework to resolve version-specific controllers inside the same module.

Examples:

  • v1 + PostController
    resolves to:

    • {ModuleBaseNamespace}\Api\Controllers\V1\PostController
  • v2 + PostController
    resolves to:

    • {ModuleBaseNamespace}\Api\Controllers\V2\PostController

This allows one route shape to map to different major-version controller implementations inside a single module.

Important behavior

The resolved version should be:

  • matched through the @version token
  • validated against configured supported versions
  • made available to framework internals as version route context
  • used for version-aware controller resolution
  • kept distinct from ordinary controller action parameters by default

Scope

This ticket should focus on major API versioning only.

It should not introduce:

  • minor or patch versioning in the URL
  • header-based minor/patch runtime negotiation
  • separate modules per API version

Minor and patch changes should remain outside the first implementation scope.

Acceptance Criteria

  • routes can explicitly declare API version position using @version
  • matched @version values are validated against configured supported versions
  • a single API module can expose multiple supported major versions concurrently
  • matched version values are used for version-aware controller resolution within the same module
  • routed version values do not become ordinary positional controller action parameters by default
  • tests cover @version route matching and version-aware controller resolution behavior
  • templates and examples can be updated to use @version where appropriate

Notes

Relevant code:

  • src/Router/PatternCompiler.php
  • src/Router/RouteBuilder.php
  • src/Router/RouteDispatcher.php
  • src/Router/MatchedRoute.php
  • src/Http/Traits/Request/Route.php
  • src/Module/Templates/DemoApi

This ticket depends on:

Lingua principale
PHP
Stelle
36
Fork
22
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di quantum-php/framework

Tutte le issue di quantum-php/framework

Issue simili

Altre issue su PHP

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.