Naify\Router\Route クラス

ルート定義 — 単一の URL パターンとハンドラの組み合わせ

Router に登録される 1 件分のルート定義。 1 つの HTTP メソッド集合、1 つの URL パターン、1 つのハンドラに加え、 ルート名、trimExtension 設定、ルート単位ミドルウェアを保持する。

パターン記法:

  • /about -- 静的パス
  • /users/{id} -- 1 セグメントのパラメータ
  • /users/{id:\d+} -- 正規表現制約付きパラメータ
  • /archive/{year:\d{4}} -- { } を含む regex 制約
  • /hello/[{name}] -- オプショナル区間
  • /api[/{target:.*}] -- オプショナル + ワイルドカード
  • /files/{name} -- ドットやハイフンを含む値も / 以外なら一致

match() の挙動:

  • パターンは完全一致で評価される
  • デフォルトの {param} は [^/]+ 相当
  • trimExtension() を付けると /path.json を /path として照合する
  • マッチしたパラメータは RequestContext::setUrlParams() 経由で Context に入る

代表例:

  $router->any('/admin/{id}', $handler)
      ->setName('admin.detail')
      ->trimExtension()
      ->addMiddleware(new RequireAuthMiddleware());

使用例

$router->any('/posts/{id:\d+}', $handler);
$router->any('/docs/[{page}]', $handler);
$router->any('/api[/{target:.*}]', $handler);

プロパティ

名前型説明
private $methods array 許可する HTTP メソッド。['ANY'] は全メソッド許可 8.1 → readonly
private $pattern string ルート定義時に与えられた元の URL パターン文字列 8.1 → readonly
private $handler mixed マッチ後に呼ばれるルートハンドラ。string は Router が実行時に解決する 8.1 → readonly
private $name ?string ルート名(urlFor 用)
private $parsedPattern ?RoutePattern 照合とURL生成に使う解析済みパターン
private $trimExtensionDepth int マッチ前に path から削る拡張子段数。0 なら無効
private $middleware array ルート単位のミドルウェア

メソッド

メソッド説明
public __construct(array $methods, string $pattern, callable|string $handler): ルート定義を初期化する
public match(string $method, string $path): ?array リクエストメソッドとパスがこのルートにマッチするか判定する
HTTP メソッドが許可されており、かつ compile 済み正規表現に path が一致した時だけ
URL パラメータの配列を返す。
public getPattern(): string 元のパターン文字列を取得する 8.4 → property hooks
public getHandler(): callable|string ルートハンドラを取得する 8.4 → property hooks
public getName(): ?string ルート名を取得する 8.4 → property hooks
public setName(string $name): static ルート名を設定する
public trimExtension(int $depth = 1): static 拡張子を無視してマッチングする
/test/doccheck.json でも /test/doccheck にマッチする。
拡張子の値は $context->getRequestUrl('extension') で取得可能。
public addMiddleware(MiddlewareInterface $middleware): static ルート単位のミドルウェアを追加する
実行順は Router 側での適用時に、追加順を保ったままパイプラインへ渡される。
public getMiddleware(): array ルート単位のミドルウェア一覧を取得する 8.4 → property hooks
private compileRegex(): string パターン文字列を正規表現にコンパイルする
変換ルール:
{name} → (?P<name>[^/]+)
{name:pattern} → (?P<name>pattern)
[optional] → (?:optional)?

1 度コンパイルした結果は RoutePattern が保持し、2 回目以降は再利用する。
private getParsedPattern(): RoutePattern
public buildPath(array $data = '...'): string URLパラメータを適用したパスを生成する