类 RouteBuilder
提供用于构建路由以及解析/匹配URL到路由的功能。
常量
属性摘要
-
$_collection protected
Cake\Routing\RouteCollection
应该将路由添加到的路由集合。
-
$_extensions protected
list<string>
应该设置到连接的路由中的扩展名。
-
$_namePrefix protected
字符串
连接路由的名称前缀。
-
$_params protected
数组
如果有的话,作用域参数。
-
$_path protected
字符串
此集合使用的路径前缀作用域。
-
$_resourceMap protected static
array<string, array>
默认 HTTP 请求方法 => 控制器操作映射。
-
$_routeClass protected
字符串
如果在 connect() 选项中未提供,则要使用的默认路由类。
-
$middleware protected
list<string>
在此构建器中,路由在构造期间会添加的中间件列表。
方法摘要
-
__construct() public
构造函数
-
_makeRoute() protected
创建路由对象,或返回提供的对象。
-
_methodRoute() protected
创建仅响应单个 HTTP 方法的路由的助手。
-
addExtensions() public
将其他扩展名添加到当前作用域中已有的扩展名中
-
applyMiddleware() public
将一个或多个中间件应用于当前路由作用域。
-
connect() public
连接新的路由。
-
delete() public
创建一个仅响应 DELETE 请求的路由。
-
fallbacks() public
连接
/{controller}
和/{controller}/{action}/*
回退路由。 -
get() public
创建一个仅响应 GET 请求的路由。
-
getExtensions() public
获取此路由构建器作用域中的扩展名。
-
getMiddleware() public
获取此构建器将应用于路由的中间件。
-
getRouteClass() public
获取默认路由类。
-
head() public
创建一个仅响应 HEAD 请求的路由。
-
loadPlugin() public
从插件加载路由。
-
middlewareGroup() public
将一组中间件应用于组
-
nameExists() public
检查是否已存在具有给定名称的路由。
-
namePrefix() public
获取/设置此作用域的名称前缀。
-
options() public
创建一个仅响应 OPTIONS 请求的路由。
-
params() public
获取此作用域的参数名称/值。
-
parseDefaults() protected
如果它们是字符串,则解析默认值
-
patch() public
创建一个仅响应 PATCH 请求的路由。
-
path() public
获取此作用域所在的路径。
-
plugin() public
添加插件路由。
-
post() public
创建一个仅响应 POST 请求的路由。
-
prefix() public
添加带前缀的路由。
-
put() public
创建一个仅响应 PUT 请求的路由。
-
redirect() public
在路由器中连接新的重定向路由。
-
registerMiddleware() public
使用 RouteCollection 注册中间件。
-
resources() public
为给定的控制器生成 REST 资源路由。
-
scope() public
创建一个新的路由作用域。
-
setExtensions() public
设置此路由构建器作用域中的扩展名。
-
setRouteClass() public
设置默认路由类。
方法详细说明
__construct() ¶ public
__construct(Cake\Routing\RouteCollection $collection, string $path, array $params = [], array<string, mixed> $options = [])
构造函数
选项
routeClass
- 添加路由时要使用的默认路由类。extensions
- 添加路由时要连接的扩展名。namePrefix
- 要添加到所有路由名称之前的首缀。middleware
- 路由应该应用的中间件名称。
参数
-
Cake\Routing\RouteCollection
$collection 要将路由追加到其中的路由集合。
-
string
$path 作用域所在的路径前缀。
-
array
$params optional 作用域的路由参数。
-
array<string, mixed>
$options optional 选项列表。
_makeRoute() ¶ protected
_makeRoute(Cake\Routing\Route\Route|string $route, array $defaults, array<string, mixed> $options): Cake\Routing\Route\Route
创建路由对象,或返回提供的对象。
参数
-
Cake\Routing\Route\Route|string
$route 路由模板或路由对象。
-
array
$defaults 默认参数。
-
array<string, mixed>
$options 其他选项参数。
返回值
Cake\Routing\Route\Route
抛出
InvalidArgumentException
当路由类或路由对象无效时。
BadMethodCallException
当要创建的路由与当前作用域冲突时
_methodRoute() ¶ protected
_methodRoute(string $method, string $template, array|string $target, string|null $name): Cake\Routing\Route\Route
创建仅响应单个 HTTP 方法的路由的助手。
参数
-
string
$method 要匹配的 HTTP 方法名称。
-
string
$template 要使用的 URL 模板。
-
array|string
$target 描述目标路由参数的数组。这些参数应指示此路由指向的插件、前缀、控制器和操作。
-
string|null
$name 路由的名称。
返回值
Cake\Routing\Route\Route
addExtensions() ¶ public
addExtensions(list<string>|string $extensions): $this
将其他扩展名添加到当前作用域中已有的扩展名中
参数
-
list<string>|string
$extensions 要添加的一个或多个扩展名
返回值
$this
applyMiddleware() ¶ public
applyMiddleware(string ...$names): $this
将一个或多个中间件应用于当前路由作用域。
要求通过registerMiddleware()
注册中间件。
参数
-
string
...$names 要应用于当前作用域的中间件的名称。
返回值
$this
抛出
InvalidArgumentException
如果它无法应用给定的中间件或中间件组之一。
另请参阅
connect() ¶ public
connect(Cake\Routing\Route\Route|string $route, array|string $defaults = [], array<string, mixed> $options = []): Cake\Routing\Route\Route
连接新的路由。
路由是将请求 URL 连接到应用程序中对象的一种方式。本质上,路由是一组用于将请求匹配到目标的正则表达式。
示例
$routes->connect('/{controller}/{action}/*');
第一个参数将用作控制器名称,而第二个参数将用作操作名称。'/*' 语法使此路由变得贪婪,因为它将匹配/posts/index
之类的请求以及/posts/edit/1/foo/bar
之类的请求。
$routes->connect('/home-page', ['controller' => 'Pages', 'action' => 'display', 'home']);
以上显示了使用路由参数默认值以及为静态路由提供路由参数。
$routes->connect(
'/{lang}/{controller}/{action}/{id}',
[],
['id' => '[0-9]+', 'lang' => '[a-z]{3}']
);
显示了使用自定义路由参数连接路由以及为这些参数提供模式。路由参数的模式不需要捕获组,因为每个路由参数都会添加一个捕获组。
$options 提供了一些在 $options 数组中具有特殊含义的“特殊”键。
routeClass
用于通过自定义路由类扩展和更改单个路由解析请求和处理反向路由的方式。例如'routeClass' => 'SlugRoute'
pass
用于定义应将哪些路由参数移入 pass 数组。将参数添加到 pass 将从常规路由数组中将其移除。例如'pass' => ['slug']
。persist
用于定义在生成新 URL 时应自动包含哪些路由参数。您可以通过在 URL 中重新定义持久参数来覆盖它们,或者通过将参数设置为false
来删除它们。例如'persist' => ['lang']
multibytePattern
设置为 true 以在路由参数模式中启用多字节模式支持。_name
用于为路由定义特定名称。这可用于优化反向路由查找。如果未定义,将为每个连接的路由生成一个名称。_ext
是一个文件名扩展数组,如果存在,这些扩展名将从 url 中解析出来。请参阅 {@link \Cake\Routing\RouteCollection::setExtensions()}。_method
仅匹配使用特定 HTTP 动词的请求。_host
- 如果您希望此路由仅匹配特定主机名,请定义主机名模式。您可以使用.*
和 来创建通配符子域/主机,例如*.example.com
匹配example.com
上的所有子域。- '_port` - 如果您希望此路由仅匹配特定端口号,请定义端口。
使用 _method
条件的示例
$routes->connect('/tasks', ['controller' => 'Tasks', 'action' => 'index', '_method' => 'GET']);
上面的路由将仅匹配 GET 请求。POST 请求将无法匹配此路由。
参数
-
Cake\Routing\Route\Route|string
$route 描述路由模板的字符串
-
array|string
$defaults 可选 描述默认路由参数的数组。这些参数将默认使用,可以提供非动态的路由参数。见上文。
-
array<string, mixed>
$options optional 一个数组,将路由中命名的元素与正则表达式匹配,该正则表达式应与该元素匹配。还包含其他参数,例如应将哪些路由参数移入传递的参数、为路由参数提供模式以及提供自定义路由类的名称。
返回值
Cake\Routing\Route\Route
抛出
InvalidArgumentException
BadMethodCallException
delete() ¶ public
delete(string $template, array|string $target, string|null $name = null): Cake\Routing\Route\Route
创建一个仅响应 DELETE 请求的路由。
参数
-
string
$template 要使用的 URL 模板。
-
array|string
$target 描述目标路由参数的数组。这些参数应指示此路由指向的插件、前缀、控制器和操作。
-
string|null
$name 可选 路由的名称。
返回值
Cake\Routing\Route\Route
fallbacks() ¶ public
fallbacks(string|null $routeClass = null): $this
连接/{controller}
和/{controller}/{action}/*
回退路由。
这是在给定范围内连接回退路由的快捷方法。
参数
-
string|null
$routeClass 可选 要使用的路由类,如果未指定,则使用默认的 routeClass
返回值
$this
get() ¶ public
get(string $template, array|string $target, string|null $name = null): Cake\Routing\Route\Route
创建一个仅响应 GET 请求的路由。
参数
-
string
$template 要使用的 URL 模板。
-
array|string
$target 描述目标路由参数的数组。这些参数应指示此路由指向的插件、前缀、控制器和操作。
-
string|null
$name 可选 路由的名称。
返回值
Cake\Routing\Route\Route
head() ¶ public
head(string $template, array|string $target, string|null $name = null): Cake\Routing\Route\Route
创建一个仅响应 HEAD 请求的路由。
参数
-
string
$template 要使用的 URL 模板。
-
array|string
$target 描述目标路由参数的数组。这些参数应指示此路由指向的插件、前缀、控制器和操作。
-
string|null
$name 可选 路由的名称。
返回值
Cake\Routing\Route\Route
loadPlugin() ¶ public
loadPlugin(string $name): $this
从插件加载路由。
路由文件将有一个名为 $routes
的局部变量可用,该变量包含当前的 RouteBuilder 实例。
参数
-
string
$name 插件名称
返回值
$this
抛出
Cake\Core\Exception\MissingPluginException
当插件未加载时。
InvalidArgumentException
当插件没有路由文件时。
middlewareGroup() ¶ public
middlewareGroup(string $name, list<string> $middlewareNames): $this
将一组中间件应用于组
参数
-
string
$name 中间件组的名称
-
list<string>
$middlewareNames 中间件的名称
返回值
$this
namePrefix() ¶ public
namePrefix(string|null $value = null): string
获取/设置此作用域的名称前缀。
修改名称前缀只会更改在更改前缀后连接的路由使用的前缀。
参数
-
string|null
$value 可选 要设置的值或 null。
返回值
字符串
options() ¶ public
options(string $template, array|string $target, string|null $name = null): Cake\Routing\Route\Route
创建一个仅响应 OPTIONS 请求的路由。
参数
-
string
$template 要使用的 URL 模板。
-
array|string
$target 描述目标路由参数的数组。这些参数应指示此路由指向的插件、前缀、控制器和操作。
-
string|null
$name 可选 路由的名称。
返回值
Cake\Routing\Route\Route
parseDefaults() ¶ protected
parseDefaults(array|string $defaults): array
如果它们是字符串,则解析默认值
参数
-
array|string
$defaults 来自 connect() 方法的 Defaults 数组。
返回值
数组
patch() ¶ public
patch(string $template, array|string $target, string|null $name = null): Cake\Routing\Route\Route
创建一个仅响应 PATCH 请求的路由。
参数
-
string
$template 要使用的 URL 模板。
-
array|string
$target 描述目标路由参数的数组。这些参数应指示此路由指向的插件、前缀、控制器和操作。
-
string|null
$name 可选 路由的名称。
返回值
Cake\Routing\Route\Route
plugin() ¶ public
plugin(string $name, Closure|array $options = [], Closure|null $callback = null): $this
添加插件路由。
此方法创建一个新的作用域路由集合,其中包含相关的插件信息。
插件名称将被变位为下划线版本以创建路由路径。如果您想要自定义路径名称,请使用 path
选项。
在作用域集合中连接的路由将具有正确的路径段前缀,并具有匹配的插件路由键设置。
选项
path
要使用的路径前缀。默认为Inflector::dasherize($name)
。_namePrefix
为命名路由设置前缀。该前缀将附加到在作用域回调中创建的任何路由的名称之前。
参数
-
string
$name 要为其构建路由的插件名称
-
Closure|array
$options 可选 要使用的选项或用于构建路由的回调。
-
Closure|null
$callback 可选 要调用的回调,用于构建插件路由,仅在定义了 $options 时才需要。
返回值
$this
post() ¶ public
post(string $template, array|string $target, string|null $name = null): Cake\Routing\Route\Route
创建一个仅响应 POST 请求的路由。
参数
-
string
$template 要使用的 URL 模板。
-
array|string
$target 描述目标路由参数的数组。这些参数应指示此路由指向的插件、前缀、控制器和操作。
-
string|null
$name 可选 路由的名称。
返回值
Cake\Routing\Route\Route
prefix() ¶ public
prefix(string $name, Closure|array $params = [], Closure|null $callback = null): $this
添加带前缀的路由。
此方法创建一个新的作用域路由集合,其中包含相关的前缀信息。
$name 参数用于生成路由参数名称。例如,admin
的路径会导致 'prefix' => 'admin'
应用于所有连接的路由。
您可以根据需要重新打开前缀,以及嵌套前缀。嵌套前缀将导致类似 admin/api
的前缀值,这将转换为 Controller\Admin\Api\
命名空间。
如果您需要带有点的前缀,例如:'/api/v1.0',请为 $params 参数使用 'path' 键
$route->prefix('Api', function($route) {
$route->prefix('V10', ['path' => '/v1.0'], function($route) {
// Translates to `Controller\Api\V10\` namespace
});
});
参数
-
string
$name 要使用的前缀名称。
-
Closure|array
$params 可选 要添加到每个连接路由的路由默认值的数组。如果您没有参数,此参数可以是 Closure。
-
Closure|null
$callback 可选 要调用的回调,用于构建有前缀的路由。
返回值
$this
抛出
InvalidArgumentException
如果未传递有效的回调
put() ¶ public
put(string $template, array|string $target, string|null $name = null): Cake\Routing\Route\Route
创建一个仅响应 PUT 请求的路由。
参数
-
string
$template 要使用的 URL 模板。
-
array|string
$target 描述目标路由参数的数组。这些参数应指示此路由指向的插件、前缀、控制器和操作。
-
string|null
$name 可选 路由的名称。
返回值
Cake\Routing\Route\Route
redirect() ¶ public
redirect(string $route, array|string $url, array<string, mixed> $options = []): Cake\Routing\Route\Route
在路由器中连接新的重定向路由。
重定向路由与普通路由不同,因为如果找到匹配项,它们会执行实际的标头重定向。重定向可以在您的应用程序内发生,也可以重定向到外部位置。
示例
$routes->redirect('/home/*', ['controller' => 'Posts', 'action' => 'view']);
将 /home/* 重定向到 /posts/view 并将参数传递到 /posts/view。使用数组作为重定向目标允许您使用其他路由来定义 URL 字符串应重定向到的位置。
$routes->redirect('/posts/*', 'http://google.com', ['status' => 302]);
将 /posts/* 重定向到 http://google.com 并使用 HTTP 状态 302
选项
status
设置 HTTP 状态(默认值为 301)persist
将参数传递到重定向的路由(如果可能)。这对贪婪路由很有用,以*
结尾的路由是贪婪的。因为您可以重新映射 URL 并且不会丢失任何传递的参数。
参数
-
string
$route 描述路由模板的字符串
-
array|string
$url 要重定向到的 URL。可以是字符串或 Cake 基于数组的 URL
-
array<string, mixed>
$options optional 一个匹配路由中命名元素的数组,其中包含该元素应该匹配的正则表达式。还包含其他参数,例如哪些路由参数应该被移入传递的参数中。以及提供路由参数的模式。
返回值
Cake\Routing\Route\Route
registerMiddleware() ¶ public
registerMiddleware(string $name, Psr\Http\Server\MiddlewareInterfaceClosure|string $middleware): $this
使用 RouteCollection 注册中间件。
注册中间件后,可以将其应用于当前路由范围或任何共享相同 RouteCollection 的子范围。
参数
-
string
$name 中间件的名称。在将中间件应用于范围时使用。
-
Psr\Http\Server\MiddlewareInterfaceClosure|string
$middleware 要注册的中间件。
返回值
$this
另请参阅
resources() ¶ public
resources(string $name, Closure|array $options = [], Closure|null $callback = null): $this
为给定的控制器生成 REST 资源路由。
一种快速生成一组 REST 资源(控制器)的默认路由的方法。
用法
为应用程序控制器连接资源路由
$routes->resources('Posts');
为 Comments 插件中的 Comments 控制器连接资源路由
Router::plugin('Comments', function ($routes) {
$routes->resources('Comments');
});
插件将创建小写短横线分隔的资源路由。例如 /comments/comments
为 Admin 前缀中的 Articles 控制器连接资源路由
Router::prefix('Admin', function ($routes) {
$routes->resources('Articles');
});
前缀将创建小写短横线分隔的资源路由。例如 /admin/posts
您可以通过传递回调来创建嵌套资源
$routes->resources('Articles', function ($routes) {
$routes->resources('Comments');
});
以上将为 /articles
和 /articles/{article_id}/comments
生成资源路由。您可以使用 map
选项连接其他资源方法
$routes->resources('Articles', [
'map' => ['deleteAll' => ['action' => 'deleteAll', 'method' => 'DELETE']]
]);
除了默认路由外,这还将连接 /articles/delete_all
的路由。默认情况下,路径段将匹配键名。您可以使用资源定义中的 'path' 键来自定义路径名称。
您可以使用 inflect
选项更改路径段的生成方式
$routes->resources('PaymentTypes', ['inflect' => 'underscore']);
将生成类似 /payment-types
而不是 /payment_types
的路由
选项
- 'id' - 匹配 ID 时使用的正则表达式片段。默认情况下,匹配整数和 UUID。
- 'inflect' - 选择用于资源名称的词形变化方法。默认为 'dasherize'。
- 'only' - 仅连接特定操作列表。
- 'actions' - 覆盖用于连接操作的方法名称。
- 'map' - 应连接的额外资源路由。如果您定义了 'only' 和 'map',请确保您映射的方法也包含在 'only' 列表中。
- 'prefix' - 为资源控制器定义路由前缀。如果当前范围定义了前缀,则此前缀将附加到该前缀。
- 'connectOptions' - 连接路由的自定义选项。
- 'path' - 更改路径,使其不匹配资源名称。例如 ArticlesController 在
/posts
中可用
参数
-
string
$name 要为其连接资源路由的控制器名称。
-
Closure|array
$options 可选 生成 REST 路由时要使用的选项,或回调函数。
-
Closure|null
$callback 可选 一个可选的回调函数,在嵌套范围内执行。嵌套范围继承现有的路径和 'id' 参数。
返回值
$this
scope() ¶ public
scope(string $path, Closure|array $params, Closure|null $callback = null): $this
创建一个新的路由作用域。
使用此方法创建的范围将继承其添加到的范围的属性。这意味着当前路径和参数都将附加到提供的参数中。
$params 中的特殊键
_namePrefix
为命名路由设置前缀。该前缀将附加到在作用域回调中创建的任何路由的名称之前。
参数
-
string
$path 创建范围的路径。
-
Closure|array
$params 要添加到路由的参数,或者回调函数。
-
Closure|null
$callback 可选 要调用的构建插件路由的回调函数。仅当定义了 $params 时才需要。
返回值
$this
抛出
InvalidArgumentException
当没有可调用参数时。
setExtensions() ¶ public
setExtensions(list<string>|string $extensions): $this
设置此路由构建器作用域中的扩展名。
通过此构建器连接的未来路由将应用连接的扩展。但是,设置扩展不会修改现有路由。
参数
-
list<string>|string
$extensions 要设置的扩展。
返回值
$this
setRouteClass() ¶ public
setRouteClass(string $routeClass): $this
设置默认路由类。
参数
-
string
$routeClass 类名。
返回值
$this