CodeIgniter 4重定向功能无法正常工作

10
注销后,我尝试将页面重定向到主页,但尝试了几种方法都没有重定向成功。
class User extends BaseController
{
    public function __construct()
    {
        helper('url');
    }

关于注销功能,我使用了三种方式

redirect('/');

或者

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

或者

route_to('/');

这个回答解决了你的问题吗?使用CodeIgniter进行重定向 - Martin Dimitrov
@MartinDimitrov 我已经尝试过了。在CodeIgniter 4中不起作用。 - Senthil
我发现必须在发送任何实际输出之前调用redirect()。 redirect()最终调用php函数header()。 - Greald Henstra
9个回答

32
根据CI 4。 用法
return redirect()->to('url'); 

如果你正在使用路由,则使用:

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

你说的没错,但我们如何重定向到特定的控制器呢?就像在CI 3中我们可以使用redirect('conroller/method')一样?我不认为我们应该这样做return redirect()->to(base_url().'/public/conroller/method', 'refresh');? - Ajit Bhandari
@Samiul,请问你能否展示一下代码,为什么它不能工作? - Devsi Odedra
任何想要强制重定向路由的人,都可以通过以下方式实现:redirect('<route>','location',304)->send();。Redirect函数创建了一个RedirectResponse对象,该对象被CI运行时所使用,并且该类被扩展到MessageInterface。因为只有控制器方法可以创建消息即响应和请求对象,所以默认情况下会创建适当的响应对象,然后调用适当的发送方法。希望这能帮助那些被文档困扰的人。 - Maulik Parmar
如何在重定向后删除“index.php”? - undefined

4

我使用这个,它可以正常工作。

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

2
值得一提的是,与CI3之前的redirect()函数不同,这个函数必须从控制器内调用。例如,在库中将无法使用它。 2021年更新 事实上,这是可以做到的!只需检查返回的响应是否为对象,并在适用时返回它。因此,如果库返回一个RedirectResponse,请使用以下代码进行检查并返回。
if (!empty($log) && is_object($log)){
    return $log;
}

如果有可能返回其他对象,您当然可以使用 get_class() 来确保对象是 RedirectResponse 类型。


2
在CodeIgniter 4中,redirect()->to()返回一个RedirectResponse对象,您需要从控制器返回它来执行重定向。
例如:
class Home extends BaseController {
    public function index() {
        return redirect()->to('https://example.com');
    }
}

1

如果您正在使用未命名的路由:

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

'

'/user': 这是我的控制器名称。您还可以使用控制器/函数名称。

'

0
请查看文档
// 返回上一页 return redirect()->back();
// 转到特定的URI return redirect()->to('/admin');
// 转到命名路由 return redirect()->route('named_route');
// 在重定向时保留旧输入值,以便它们可以被old()函数使用 return redirect()->back()->withInput();
// 设置闪存消息 return redirect()->back()->with('foo', 'message');
// 复制全局响应实例中的所有cookie return redirect()->back()->withCookies();
// 复制全局响应实例中的所有标头 return redirect()->back()->withHeaders();

这是对几年前已经回答过的问题的回答。 它格式很糟糕,第一行是:“请查看文档”。它并没有真正帮助到操作人员。 - Kerel

0

我是CI4的新手。在我的情况下,我必须在App.php中正确设置$baseURL。例如,如果本地开发中端口设置不正确,它将会挂起。

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


-1

如果您遇到以下问题:

{0,string} 路由在反向路由时无法找到

请按照以下步骤进行更改以解决此错误:

请转到 system\HTTP\RedirectResponse 第91行:

更改为:

throw HTTPException::forInvalidRedirectRoute($route);

To:

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

-5

在CodeIgniter中,重定向语句使用重定向头语句将用户发送到指定的网页。 该语句位于URL助手中,可以通过以下方式加载:

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

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

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

根据Code Igniter文档:“Location更快,但在Windows服务器上有时可能会出现问题。”

示例:

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

原始回答:https://dev59.com/6XRB5IYBdhLWcg3wFz8g#725200


CI4已经默认自动加载了它。在这里不起作用。 - Sohan Arafat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接