类控制器
用于组织业务逻辑的应用程序控制器类。 提供基本功能,例如在布局中呈现视图、自动模型可用性、重定向、回调等等。
控制器应该提供一些“操作”方法。 这些是控制器上的公共方法,不是从 Controller
继承的。 每个操作都充当对资源或资源集合执行特定操作的端点。 例如,添加或编辑新对象,或列出一组对象。
可以使用 $this->getRequest()
访问请求参数。 请求对象包含请求的一部分的所有 POST、GET 和 FILES。
在执行所需操作后,控制器负责创建响应。 这通常采用生成的 View
的形式,或者可能是对另一个 URL 的重定向。 在任一情况下,$this->getResponse()
都允许您操作响应的所有方面。
控制器是根据请求参数和路由创建的。 默认情况下,控制器和操作使用常规名称。 例如,/posts/index
映射到 PostsController::index()
。 可以使用 Router::connect() 或 RouteBuilder::connect() 重新映射 URL。
生命周期回调
CakePHP 在每个请求期间触发一些生命周期回调。 通过实现一个方法,您可以接收相关的事件。 可用的回调是
beforeFilter(EventInterface $event)
在每个操作之前调用。 这是一个执行适用于所有操作的通用逻辑的好地方。beforeRender(EventInterface $event)
在呈现视图之前调用。beforeRedirect(EventInterface $event, $url, Response $response)
在进行重定向之前调用。afterFilter(EventInterface $event)
在每个操作完成后以及呈现视图后调用。
属性摘要
-
$CheckHttpCache public @property
Cake\Controller\Component\CheckHttpCacheComponent
-
$Flash public @property
Cake\Controller\Component\FlashComponent
-
$FormProtection public @property
Cake\Controller\Component\FormProtectionComponent
-
$_components protected
Cake\Controller\ComponentRegistry|null
用于创建组件的 ComponentRegistry 实例
-
$_eventClass protected
string
新事件对象的默认类名。
-
$_eventManager protected
Cake\Event\EventManagerInterface|null
此对象用来分发内部事件的 Cake\Event\EventManager 实例。
-
$_tableLocator protected
Cake\ORM\Locator\LocatorInterface|null
表定位器实例
-
$_viewBuilder protected
Cake\View\ViewBuilder|null
正在使用的视图构建器实例。
-
$autoRender protected
bool
设置为 true 以在操作逻辑之后自动呈现视图。
-
$defaultTable protected
string|null
此对象的默认表别名。
-
$middlewares protected
array
中间件列表。
-
$name protected
string
此控制器的名称。 控制器名称是复数的,以它们操作的模型命名。
-
$paginate protected
array<string, mixed>
分页设置。
-
$plugin protected
string|null
自动设置为插件的名称。
-
$request protected
Cake\Http\ServerRequest
包含有关当前请求的信息的 \Cake\Http\ServerRequest 对象的实例。 此对象包含有关请求的所有信息以及一些用于读取有关请求的其他信息的方法。
-
$response protected
Cake\Http\Response
包含有关即将进行的响应的信息的 Response 对象的实例
-
$viewClasses protected
list<string>
用于内容协商的视图类。
方法摘要
-
__construct() public
构造函数。
-
__get() public
默认表的魔法访问器。
-
_templatePath() protected
根据控制器名称和请求前缀获取 templatePath。
-
addViewClasses() public
添加此控制器可以执行内容协商的视图类。
-
afterFilter() public
在运行和呈现控制器操作后调用。
-
beforeFilter() public
在控制器操作之前调用。 可以使用此方法来配置和自定义组件或执行在每个控制器操作之前需要发生的逻辑。
-
beforeRedirect() public
当控制器的 redirect 方法被调用但在此之前,beforeRedirect 方法会被调用。任何进一步的行动。
-
beforeRender() public
在运行控制器操作后但呈现视图之前调用。 可以使用此方法执行逻辑或设置每个请求都需要的视图变量。
-
chooseViewClass() protected
使用在此控制器上定义的视图类来进行基于内容类型协商的视图选择。
-
components() public
获取此控制器的组件注册表。
-
createView() public
根据当前配置构造视图类实例。
-
disableAutoRender() public
禁用自动操作渲染。
-
dispatchEvent() public
创建和分发事件的包装器。
-
enableAutoRender() public
启用自动操作渲染。
-
fetchTable() public
获取表实例的便捷方法。
-
getAction() public
获取将由 ControllerFactory 调用的操作闭包。
-
getEventManager() public
返回此对象的 Cake\Event\EventManager 管理器实例。
-
getMiddleware() public
获取将应用于此控制器的中间件。
-
getName() public
返回控制器名称。
-
getPlugin() public
返回插件名称。
-
getRequest() public
获取请求实例。
-
getResponse() public
获取响应实例。
-
getTableLocator() public
获取表定位器。
-
implementedEvents() public
返回控制器在其生命周期中将触发的所有事件的列表。 可以覆盖此函数以添加自己的侦听器回调
-
initialize() public
初始化挂钩方法。
-
invokeAction() public
分派控制器操作。
-
isAction() public
用于检查操作是否可以从 URL 访问的方法。
-
isAutoRenderEnabled() public
如果操作应自动呈现,则返回 true。
-
loadComponent() public
将组件添加到控制器的注册表。
-
log() public
将消息写入 Log 的便捷方法。 有关写入日志的更多信息,请参见 Log::write()。
-
middleware() public
为控制器注册中间件。
-
paginate() public
处理 Table 对象中记录的分页。
-
redirect() public
在关闭 $this->autoRender 后,重定向到给定的 $url。
-
referer() public
返回此请求的引用 URL。
-
render() public
实例化正确的视图类,将数据传递给它,并使用它来呈现视图输出。
-
set() public
保存一个变量或一个关联的变量数组以在模板中使用。
-
setEventManager() public
返回此对象的 Cake\Event\EventManagerInterface 实例。
-
setName() public
设置控制器名称。
-
setPlugin() public
设置插件名称。
-
setRequest() public
设置请求对象并根据请求内容配置一些控制器属性。控制器充当某些视图变量的代理,这些变量也必须在此处更新。设置的属性是
-
setResponse() public
设置响应实例。
-
setTableLocator() public
设置表定位器。
-
shutdownProcess() public
执行此控制器的各种关闭过程。按正确顺序触发组件和控制器回调。
-
startupProcess() public
执行此控制器的启动过程。按正确顺序触发组件和控制器回调。
-
viewBuilder() public
获取正在使用的视图构建器。
-
viewClasses() public
获取此控制器可以与之执行内容协商的视图类。
方法详细信息
__construct() ¶ public
__construct(Cake\Http\ServerRequest $request, string|null $name = null, Cake\Event\EventManagerInterface|null $eventManager = null, Cake\Controller\ComponentRegistry|null $components = null)
构造函数。
如果属性为空,则根据约定设置一些属性。要覆盖 CakePHP 使用的约定,可以在类声明中定义属性。
参数
-
Cake\Http\ServerRequest
$request 此控制器的请求对象。但请注意,使用请求参数的功能将无法正常工作。
-
string|null
$name 可选 在使用模拟时覆盖测试中的有用名称。
-
Cake\Event\EventManagerInterface|null
$eventManager 可选 事件管理器。默认为新实例。
-
Cake\Controller\ComponentRegistry|null
$components 可选 要使用的 ComponentRegistry。默认为新实例。
__get() ¶ public
__get(string $name): Cake\Controller\ComponentCake\ORM\Table|null
默认表的魔法访问器。
参数
-
string
$name 属性名称
返回值
Cake\Controller\ComponentCake\ORM\Table|null
addViewClasses() ¶ public
addViewClasses(list<string> $viewClasses): $this
添加此控制器可以执行内容协商的视图类。
每个视图类都必须实现 getContentType()
钩子方法才能参与协商。
参数
-
list<string>
$viewClasses 视图类列表。
返回值
$this
另请参阅
afterFilter() ¶ public
afterFilter(Cake\Event\EventInterfaceCake\Controller\Controller> $event): Cake\Http\Response|null|void
在运行和呈现控制器操作后调用。
参数
-
Cake\Event\EventInterfaceCake\Controller\Controller>
$event 一个 Event 实例
返回值
Cake\Http\Response|null|void
链接
beforeFilter() ¶ public
beforeFilter(Cake\Event\EventInterfaceCake\Controller\Controller> $event): Cake\Http\Response|null|void
在控制器操作之前调用。 可以使用此方法来配置和自定义组件或执行在每个控制器操作之前需要发生的逻辑。
参数
-
Cake\Event\EventInterfaceCake\Controller\Controller>
$event 一个 Event 实例
返回值
Cake\Http\Response|null|void
链接
beforeRedirect() ¶ public
beforeRedirect(Cake\Event\EventInterfaceCake\Controller\Controller> $event, Psr\Http\Message\UriInterface|array|string $url, Cake\Http\Response $response): Cake\Http\Response|null|void
当控制器的 redirect 方法被调用但在此之前,beforeRedirect 方法会被调用。任何进一步的行动。
如果事件被停止,控制器将不会继续重定向请求。$url 和 $status 变量与控制器的 方法含义相同。可以将事件结果设置为响应实例,或者使用控制器的响应实例修改重定向位置。
参数
-
Cake\Event\EventInterfaceCake\Controller\Controller>
$event 一个 Event 实例
-
Psr\Http\Message\UriInterface|array|string
$url 指向应用程序中其他位置的字符串或基于数组的 URL,或绝对 URL
-
Cake\Http\Response
$response 响应对象。
返回值
Cake\Http\Response|null|void
链接
beforeRender() ¶ public
beforeRender(Cake\Event\EventInterfaceCake\Controller\Controller> $event): Cake\Http\Response|null|void
在运行控制器操作后但呈现视图之前调用。 可以使用此方法执行逻辑或设置每个请求都需要的视图变量。
参数
-
Cake\Event\EventInterfaceCake\Controller\Controller>
$event 一个 Event 实例
返回值
Cake\Http\Response|null|void
链接
chooseViewClass() ¶ protected
chooseViewClass(): string|null
使用在此控制器上定义的视图类来进行基于内容类型协商的视图选择。
返回值
string|null
components() ¶ public
components(): Cake\Controller\ComponentRegistry
获取此控制器的组件注册表。
返回值
Cake\Controller\ComponentRegistry
createView() ¶ public
createView(string|null $viewClass = null): Cake\View\View
根据当前配置构造视图类实例。
参数
-
string|null
$viewClass 可选 要实例化的视图类的可选命名空间类名。
返回值
Cake\View\View
抛出
Cake\View\Exception\MissingViewException
如果未找到视图类。
dispatchEvent() ¶ public
dispatchEvent(string $name, array $data = [], TSubject|null $subject = null): Cake\Event\EventInterface<TSubject>
创建和分发事件的包装器。
返回已分派的事件。
参数
-
string
$name 事件的名称。
-
array
$data 可选 您希望随此事件传输的任何值,监听器都可以读取。
-
TSubject|null
$subject 可选 此事件适用的对象(默认情况下为 $this)。
返回值
Cake\Event\EventInterface<TSubject>
fetchTable() ¶ public
fetchTable(string|null $alias = null, array<string, mixed> $options = []): Cake\ORM\Table
获取表实例的便捷方法。
参数
-
string|null
$alias 可选 要获取的别名。应采用驼峰式格式。如果为
null
,则使用 $defaultTable 属性的值。-
array<string, mixed>
$options 可选 要使用这些选项构建表格。如果表格已加载,则注册选项将被忽略。
返回值
Cake\ORM\Table
抛出
Cake\Core\Exception\CakeException
如果 `$alias` 参数和 `$defaultTable` 属性都为 `null`。
另请参阅
getAction() ¶ public
getAction(): Closure
获取将由 ControllerFactory 调用的操作闭包。
返回值
Closure
抛出
Cake\Controller\Exception\MissingActionException
getEventManager() ¶ public
getEventManager(): Cake\Event\EventManagerInterface
返回此对象的 Cake\Event\EventManager 管理器实例。
可以使用此实例将任何新的监听器或回调注册到对象事件,或者创建自己的事件并随意触发它们。
返回值
Cake\Event\EventManagerInterface
getTableLocator() ¶ public
getTableLocator(): Cake\ORM\Locator\LocatorInterface
获取表定位器。
返回值
Cake\ORM\Locator\LocatorInterface
implementedEvents() ¶ public
implementedEvents(): array<string, mixed>
返回控制器在其生命周期中将触发的所有事件的列表。 可以覆盖此函数以添加自己的侦听器回调
示例
public function implementedEvents()
{
return [
'Order.complete' => 'sendEmail',
'Article.afterBuy' => 'decrementInventory',
'User.onRegister' => ['callable' => 'logRegistration', 'priority' => 20, 'passParams' => true]
];
}
返回值
array<string, mixed>
invokeAction() ¶ public
invokeAction(Closure $action, array $args): void
分派控制器操作。
参数
-
Closure
$action 操作闭包。
-
array
$args 调用操作时要传递的参数。
返回值
void
isAction() ¶ public
isAction(string $action): bool
用于检查操作是否可以从 URL 访问的方法。
覆盖此方法以更改可以访问哪些控制器方法。默认实现不允许访问 Cake\Controller\Controller 上定义的所有方法,并允许访问此类所有子类的所有公共方法。
参数
-
string
$action 要检查的操作。
返回值
bool
loadComponent() ¶ public
loadComponent(string $name, array<string, mixed> $config = []): Cake\Controller\Component
将组件添加到控制器的注册表。
加载组件后,可以通过 Controller::__get() 访问它作为属性。例如
$this->loadComponent('Authentication.Authentication');
将导致 $this->Authentication
成为对该组件的引用。
参数
-
string
$name 要加载的组件名称。
-
array<string, mixed>
$config 可选 组件的配置。
返回值
Cake\Controller\Component
抛出
Exception
log() ¶ public
log(Stringable|string $message, string|int $level = LogLevel::ERROR, array|string $context = []): bool
将消息写入 Log 的便捷方法。 有关写入日志的更多信息,请参见 Log::write()。
参数
-
Stringable|string
$message 日志消息。
-
string|int
$level 可选 错误级别。
-
array|string
$context 可选 与该消息相关的其他日志数据。
返回值
bool
middleware() ¶ public
middleware(Psr\Http\Server\MiddlewareInterfaceClosure|string $middleware, array<string, mixed> $options = []): void
为控制器注册中间件。
参数
-
Psr\Http\Server\MiddlewareInterfaceClosure|string
$middleware 中间件。
-
array<string, mixed>
$options 可选 有效选项
only
: (array|string) 仅对指定的动作运行中间件。except
: (array|string) 对除指定动作之外的所有动作运行中间件。
返回值
void
paginate() ¶ public
paginate(Cake\Datasource\RepositoryInterfaceCake\Datasource\QueryInterface|string|null $object = null, array<string, mixed> $settings = []): Cake\Datasource\Paging\PaginatedInterface
处理 Table 对象中记录的分页。
将加载引用的 Table 对象,并使用请求日期和在 $this->paginate
中定义的设置让分页器对查询进行分页。
此方法还将在视图中提供 PaginatorHelper。
参数
-
Cake\Datasource\RepositoryInterfaceCake\Datasource\QueryInterface|string|null
$object 可选 要分页的表格(例如:Table 实例、“TableName” 或 Query 对象)
-
array<string, mixed>
$settings 可选 用于分页的设置/配置。请参阅 {@link \Cake\Controller\Controller::$paginate}。
返回值
Cake\Datasource\Paging\PaginatedInterface
抛出
Cake\Http\Exception\NotFoundException
当请求超出范围的页面时。
链接
redirect() ¶ public
redirect(Psr\Http\Message\UriInterface|array|string $url, int $status = 302): Cake\Http\Response|null
在关闭 $this->autoRender 后,重定向到给定的 $url。
参数
-
Psr\Http\Message\UriInterface|array|string
$url 字符串、基于数组的 URL 或 UriInterface 实例。
-
int
$status 可选 HTTP 状态码。默认为
302
。
返回值
Cake\Http\Response|null
链接
referer() ¶ public
referer(array|string|null $default = '/', bool $local = true): string
返回此请求的引用 URL。
参数
-
array|string|null
$default 可选 如果无法从标头读取 HTTP_REFERER,则要使用的默认 URL
-
bool
$local 可选 如果为 false,则不要将引用 URL 限制为本地服务器。小心信任外部来源。
返回值
string
render() ¶ public
render(string|null $template = null, string|null $layout = null): Cake\Http\Response
实例化正确的视图类,将数据传递给它,并使用它来呈现视图输出。
参数
-
string|null
$template 可选 用于渲染的模板
-
string|null
$layout 可选 要使用的布局
返回值
Cake\Http\Response
链接
set() ¶ public
set(array|string $name, mixed $value = null): $this
保存一个变量或一个关联的变量数组以在模板中使用。
参数
-
array|string
$name 字符串或数据数组。
-
mixed
$value 可选 如果 $name 是字符串(然后用作键),则为值。如果 $name 是关联数组,则不使用,否则用作 $name 键的值。
返回值
$this
setEventManager() ¶ public
setEventManager(Cake\Event\EventManagerInterface $eventManager): $this
返回此对象的 Cake\Event\EventManagerInterface 实例。
可以使用此实例将任何新的监听器或回调注册到对象事件,或者创建自己的事件并随意触发它们。
参数
-
Cake\Event\EventManagerInterface
$eventManager 要设置的 eventManager
返回值
$this
setPlugin() ¶ public
setPlugin(string|null $name): $this
设置插件名称。
参数
-
string|null
$name 插件名称。
返回值
$this
setRequest() ¶ public
setRequest(Cake\Http\ServerRequest $request): $this
设置请求对象并根据请求内容配置一些控制器属性。控制器充当某些视图变量的代理,这些变量也必须在此处更新。设置的属性是
- $this->request - 到 $request 参数
参数
-
Cake\Http\ServerRequest
$request 请求实例。
返回值
$this
setResponse() ¶ public
setResponse(Cake\Http\Response $response): $this
设置响应实例。
参数
-
Cake\Http\Response
$response 响应实例。
返回值
$this
setTableLocator() ¶ public
setTableLocator(Cake\ORM\Locator\LocatorInterface $tableLocator): $this
设置表定位器。
参数
-
Cake\ORM\Locator\LocatorInterface
$tableLocator LocatorInterface 实例。
返回值
$this
shutdownProcess() ¶ public
shutdownProcess(): Psr\Http\Message\ResponseInterface|null
执行此控制器的各种关闭过程。按正确顺序触发组件和控制器回调。
- 触发组件
shutdown
回调。 - 调用控制器的
afterFilter
方法。
返回值
Psr\Http\Message\ResponseInterface|null
startupProcess() ¶ public
startupProcess(): Psr\Http\Message\ResponseInterface|null
执行此控制器的启动过程。按正确顺序触发组件和控制器回调。
- 初始化组件,这将触发它们的
initialize
回调 - 调用控制器
beforeFilter
。 - 触发 Component
startup
方法。
返回值
Psr\Http\Message\ResponseInterface|null
viewClasses() ¶ public
viewClasses(): list<string>
获取此控制器可以与之执行内容协商的视图类。
每个视图类都必须实现 getContentType()
钩子方法才能参与协商。
返回值
list<string>
另请参阅
属性详情
$_eventManager ¶ protected
此对象用来分发内部事件的 Cake\Event\EventManager 实例。
类型
Cake\Event\EventManagerInterface|null
$paginate ¶ 受保护的
分页设置。
调用 paginate() 时,这些设置将与您提供的配置合并。可能的键
maxLimit
- 用户可以选择查看的最大限制。默认值为 100limit
- 每页的初始项目数。默认值为 20。page
- 起始页,默认为 1。allowedParameters
- 用户可以使用请求参数设置的参数列表。修改此列表将允许用户对分页有更多影响,请谨慎使用您允许的内容。className
- 要使用的分页器类。默认为Cake\Datasource\Paging\NumericPaginator::class
。
类型
array<string, mixed>
$request ¶ 受保护的
包含有关当前请求的信息的 \Cake\Http\ServerRequest 对象的实例。 此对象包含有关请求的所有信息以及一些用于读取有关请求的其他信息的方法。
类型
Cake\Http\ServerRequest