gpt4 book ai didi

php - 在 Slim Framework 上重定向错误

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

我想根据网站表单中的信息重定向到一个页面(error.php,或者 404/406.php,无论错误是什么)。我设法记录了这样的错误:

if ($date > $curdate) {
return $response
->withStatus(406)
->withHeader('Content-Type', 'text/html')
->write('You can\'t select dates in the future!');
}

我怎样才能让它发送给你一个特定错误的页面,而不是在网络选项卡中记录/请求它?

编辑进一步解释:现在我明白了:

Request URL:http://raspberrypi/chartAPI/api/{id}/{date1}/{date2}
Request Method:POST
Status Code:406 Not Acceptable
Remote Address:192.168.0.80:80
Referrer Policy:no-referrer-when-downgrade

这几乎按预期工作。我想要做的是将我发送到“http://raspberrypi/chartAPI/error/406”(例如),并在名为 406.php(或 error406.php 或任何您想要的名称)的文件中显示内容。

Edit2:我现在设法用这个做一些事情:

return $response->withRedirect("error.php");

但是我明白了:

Request URL:http://raspberrypi/chartAPI/api/{id}/{date1}/error.php
Request Method:GET
Status Code:405 Method Not Allowed

slim 抛出这个错误:

Method not allowed. Must be one of: POST

为什么要删除 {date2}?为什么它要求 POST 方法?

最佳答案

你可以像这样扩展 NotFound 类

<?php
namespace App\Action;

use Slim\Handlers\AbstractHandler;
use Slim\Views\Twig;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;

class CustomErrorHandler extends AbstractHandler {

private $view;

public function __construct(Twig $view) {
$this->view = $view;
}

public function __invoke(ServerRequestInterface $request, ResponseInterface $response) {
parent::__invoke($request, $response);
$status = $response->getStatusCode();

$this->view->render($response, $status . '.twig');

return $response->withStatus($status);
}

有了 Slim v3、PSR-7 和中间件,上面的一切都可以在几行代码中完成:

// $c is the DI container of Slim
$app->add(function ($request, $response, $next) use ($c) {
// First execute anything else
$response = $next($request, $response);

// Have multiple if's for each status code or use a switch based on $response->getStatusCode()
if (404 === $response->getStatusCode()) {
// A 404 should be invoked
$handler = $c['customErrorHandler'];
return $handler($request, $response);
}

// Any other request, pass on current response
return $response;

希望对你有帮助

关于php - 在 Slim Framework 上重定向错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43611649/

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