gpt4 book ai didi

php - 中间件取消路由前的 Silex 应用程序

转载 作者:搜寻专家 更新时间:2023-10-31 21:23:10 28 4
gpt4 key购买 nike

我找不到在“中间件之前”中取消操作并在不执行 Controller 的情况下将响应发送给客户端的方法。

例如:

$app->before( function( Request $request ) {
// Do something here
// ...
// Here sent the response to the client and don't execute the controller
}});

可能吗?

一个例子

这段代码工作正常。我正在寻找使用框架内置方法的另一种解决方案。如果不可能,没问题。

$app->before( function( Request $request ) {
// Do something here
// ...

header( 'Content-Type: application/json' );

echo json_encode( array(
'message' => 'Invalid token'
) );

http_response_code( 400 ); // This code return Bad Request to client
exit; // Cancel the rest of the framework
}});

最佳答案

如果您想立即取消请求并返回 400 响应,请使用异常。在您的情况下,用户未经授权,因此适合 401 之类的内容。

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
use Symfony\Component\HttpFoundation\Response;

$app->match('/', function () use ($app) {
$app->before(function (Request $request) {
$loggedIn= false;

if (!$loggedIn) {
throw new UnauthorizedHttpException(null,'unauthorized',null,Response::HTTP_UNAUTHORIZED);
}
});
});

$app->error(function (\Exception $e, Request $request, $code) {
$message = strlen($e->getMessage()) > 0 ? $e->getMessage() : null;
switch ($code) {
case Response::HTTP_UNAUTHORIZED:
$response = new Response($message, Response::HTTP_UNAUTHORIZED);
break;
default:
$response = new Response($message, Response::HTTP_NOT_FOUND);
break;
}
return $response;
});

关于php - 中间件取消路由前的 Silex 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42015361/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com