问题描述
routes.PHP
$routes->applyMiddleware('MyMiddleware');
Application.PHP
public function routes(\Cake\Routing\RouteBuilder $routes): void {
$options = [
'httponly' => true,];
$routes->registerMiddleware('csrf',new CsrfProtectionMiddleware($options));
$routes->registerMiddleware('MyMiddleware',new Middleware\MyMiddleware());
parent::routes($routes);
}
src / Middleware / MyMiddleware.PHP
public function process(ServerRequestInterface $request,RequestHandlerInterface $handler): ResponseInterface { $response = $handler->handle($request); return $response->withStatus(401,'Fail'); }
它正确响应了httpd 401代码,但是脚本继续工作,并通过了控制器和视图。
我想通过返回除200以外的http代码来停止执行。在cakePHP 4中不起作用。
有人可以告诉我如何返回http 401并破坏脚本。
解决方法
我发现它没有使用方法过程的唯一形式,即使在cakePHP 4中,我也使用了__invoke方法,我可以获得预期的结果