gpt4 book ai didi

php - 在 PHP 中重定向的正确方法是什么

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

我正在尝试制作一个 MVC php 框架。我正在尝试编写可测试的代码。我知道 exitdie() 不是 header("Location: http://example.com"); 之后的好解决方案。

这就是我目前做重定向的方式:
这是我的代码的简单版本。

<?php
// create a RedirectException class
class RedirectException extends \Exception {}

<?php
// it is index.php
try {
include 'view.php'
} catch (RedirectException $e) {
header(sprintf("Location: %s", $e->getMessage());
header('HTTP/1.1 302 Found', true, 302);
} catch (Exception $exception) {
// print exception here or, do something else
}

<?php
// it is view.php
$url = 'http://example.com';
throw new RedirectException($url);

当我运行 index.php

时,这个流程应该可以正常工作

在我看来,我的做法是正确的。
问题不在于响应代码。

问题是,我需要知道:使用 Exception 管理重定向是个好主意吗?或者我应该以其他方式尝试?

最佳答案

如前所述,从语义的角度来看,重定向作为抛出异常时采取的操作并不准确。通常,重定向是在处理向客户端提供响应的层中实现的,因为从技术角度来看,重定向实际上是作为 header (Location) 实现的。

一个非常粗略的例子可以说明如何更干净地工作,当您的 MVC 架构中的 Controller 能够提供“响应”时,作为其状态的一部分可以发出重定向信号,例如

class SomeController {
public function home(Request $request, Response $response) {
return $response->redirect('/somewhere');
}
}

在其实现中,它会简单地将 Location:/somewhere header 附加到您的 Web 应用程序提供给客户端的响应中。

关于php - 在 PHP 中重定向的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54377829/

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