CakePHP
  • 文档
    • 书籍
    • API
    • 视频
    • 报告安全问题
    • 隐私政策
    • 标识和商标
  • 商业解决方案
  • 周边商品
  • 公路旅行
  • 团队
  • 社区
    • 社区
    • 参与
    • 问题(Github)
    • 烘焙坊
    • 精选资源
    • 培训
    • 聚会
    • 我的 CakePHP
    • CakeFest
    • 时事通讯
    • Linkedin
    • YouTube
    • Facebook
    • Twitter
    • Mastodon
    • 帮助和支持
    • 论坛
    • Stack Overflow
    • IRC
    • Slack
    • 付费支持
CakePHP

C CakePHP 5.1 Chiffon API

  • 项目
    • CakePHP
      • CakePHP
      • Chronos
      • Elastic Search
      • 队列
  • 版本
    • 5.1
      • 5.1
      • 5.0
      • 4.5
      • 4.4
      • 4.3
      • 4.2
      • 4.1
      • 4.0
      • 3.10
      • 3.9
      • 3.8
      • 3.7
      • 3.6
      • 3.5
      • 3.4
      • 3.3
      • 3.2
      • 3.1
      • 3.0
      • 2.10
      • 2.9
      • 2.8
      • 2.7
      • 2.6
      • 2.5
      • 2.4
      • 2.3
      • 2.2
      • 2.1
      • 2.0
      • 1.3
      • 1.2

命名空间

  • 全局
  • Cake
    • Cache
    • Collection
    • Command
    • Console
    • Controller
    • Core
    • Database
    • Datasource
    • Error
    • Event
    • Form
    • Http
    • I18n
    • Log
    • Mailer
    • Network
    • ORM
    • Routing
      • Exception
      • Middleware
      • Route
    • TestSuite
    • Utility
    • Validation
    • View

类 RouteBuilder

提供用于构建路由以及解析/匹配URL到路由的功能。

命名空间: Cake\Routing

常量

  • 字符串
    ID ¶
    '[0-9]+'

    自动递增 ID 的正则表达式

  • 字符串
    UUID ¶
    '[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}'

    UUID 的正则表达式

属性摘要

  • $_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
如果它无法应用给定的中间件或中间件组之一。
另请参阅
\Cake\Routing\RouteCollection::addMiddlewareToScope()

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

getExtensions() ¶ public

getExtensions(): list<string>

获取此路由构建器作用域中的扩展名。

返回值
list<string>

getMiddleware() ¶ public

getMiddleware(): list<string>

获取此构建器将应用于路由的中间件。

返回值
list<string>

getRouteClass() ¶ public

getRouteClass(): string

获取默认路由类。

返回值
字符串

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

nameExists() ¶ public

nameExists(string $name): bool

检查是否已存在具有给定名称的路由。

参数
string $name

名称。

返回值
bool

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

params() ¶ public

params(): array

获取此作用域的参数名称/值。

返回值
数组

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

path() ¶ public

path(): string

获取此作用域所在的路径。

返回值
字符串

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
另请参阅
\Cake\Routing\RouteCollection

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

属性详细信息

$_collection ¶ protected

应该将路由添加到的路由集合。

类型
Cake\Routing\RouteCollection

$_extensions ¶ protected

应该设置到连接的路由中的扩展名。

类型
list<string>

$_namePrefix ¶ protected

连接路由的名称前缀。

类型
字符串

$_params ¶ protected

如果有的话,作用域参数。

类型
数组

$_path ¶ protected

此集合使用的路径前缀作用域。

类型
字符串

$_resourceMap ¶ protected static

默认 HTTP 请求方法 => 控制器操作映射。

类型
array<string, array>

$_routeClass ¶ protected

如果在 connect() 选项中未提供,则要使用的默认路由类。

类型
字符串

$middleware ¶ protected

在此构建器中,路由在构造期间会添加的中间件列表。

类型
list<string>
OpenHub
Pingping
Linode
  • 商业解决方案
  • 展示
  • 文档
  • 书籍
  • API
  • 视频
  • 报告安全问题
  • 隐私政策
  • 标识和商标
  • 社区
  • 参与
  • 问题(Github)
  • 烘焙坊
  • 精选资源
  • 培训
  • 聚会
  • 我的 CakePHP
  • CakeFest
  • 时事通讯
  • Linkedin
  • YouTube
  • Facebook
  • Twitter
  • Mastodon
  • 帮助和支持
  • 论坛
  • Stack Overflow
  • IRC
  • Slack
  • 付费支持

使用 CakePHP API 文档 生成