CodeIgniter 4 重定向功能不起作用

CodeIgniter 4 redirect function not working

注销后,我尝试重定向到主页。我尝试了几种方法,但没有重定向。

class User extends BaseController
{
    public function __construct()
    {
        helper('url');
    }

用于注销功能。我用了三种方式

redirect('/');

header("Location:".base_url());

route_to('/');

根据CI 4

使用

return redirect()->to('url'); 

如果您正在使用路由,则使用

return redirect()->route('named_route');

code igniter 中的重定向语句使用重定向 header 语句将用户发送到指定的网页。 此语句驻留在按以下方式加载的 URL 帮助器中:

 $this->load->helper('url');

重定向函数加载在函数调用的第一个参数中指定并使用配置文件中指定的选项构建的本地 URI。

第二个参数允许开发者使用不同的HTTP命令来执行重定向"location"或"refresh"。

根据 Code Igniter 文档:"Location is faster, but on Windows servers it can sometimes be a problem."

示例:

if ($user_logged_in === FALSE)
{
 redirect('/account/login', 'refresh');
}

原答案:https://whosebug.com/a/725200/5700401

在 codeigniter 4 中,redirect()->to() return 是一个 RedirectResponse 对象,您需要从控制器 return 执行重定向。

例如

class Home extends BaseController {
    public function index() {
        return redirect()->to('https://example.com');
    }
}

我用过这个,效果很好

return redirect()->to(site_url());

如果您发现:

{0, string} route cannot be found while reverse-routing

这个错误:

Please Go to system\HTTP\RedirectResponse Line no 91 :

变化:

throw HTTPException::forInvalidRedirectRoute($route);

收件人:

return $this->redirect(site_url('/Home'));  
(dashboard after login)

我是 CI4 新手。就我而言,我必须在 App.php 中正确设置 $baseURL。比如你本地开发中端口设置错误,直接挂掉。

例如。 public $baseURL = 'http://localhost:8888/';

值得一提的是,与以前的 CI3 redirect() 函数不同,这个函数必须从 Controller 中调用。例如,它在图书馆中不起作用。

2021 年更新

其实是可以做到的!只需检查 returned 响应是一个对象,然后 return 它就是对象。因此,如果库 return 是 RedirectResponse,请使用以下代码检查它,如果适用,return。

if (!empty($log) && is_object($log)){
    return $log;
}

您当然可以 get_class() 来确保该对象是 RedirectResponse 的类型,如果有任何可能 returned.

如果您使用未命名路线:

$this->response->redirect(site_url('/user'));

'/user': 这是我的控制器名称。您也可以使用 controller/function 名称。

请查看文档

//返回上一页 return 重定向()->返回();

// 转到特定的 URI return redirect()->to('/admin');

// 转到命名路由 return 重定向()->路由('named_route');

// 在重定向时保留旧的输入值,以便 old() 函数可以使用它们 return redirect()->back()->withInput();

// 设置一条闪信 return redirect()->back()->with('foo', 'message');

// 从全局响应实例复制所有 cookie return redirect()->back()->withCookies();

// 从全局响应实例中复制所有 headers return redirect()->back()->withHeaders();