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パラメータを適用したパスを生成する |