gpt4 book ai didi

php - 未重定向到 Codeigniter 4 中的特定 URL

转载 作者:行者123 更新时间:2023-12-03 19:16:14 25 4
gpt4 key购买 nike

为什么每当我通过 Codeigniter 4 Controller 的构造函数重定向某些内容时都不起作用?

<?php namespace App\Controllers\Web\Auth;

class Register extends \App\Controllers\BaseController
{
function __construct()
{
if(session('username')){
return redirect()->to('/dashboard');
}
}
public function index()
{
// return view('welcome_message');
}
}

但是,如果我把它放在索引中,它就会按预期工作。
public function index()
{
if(session('username')){
return redirect()->to('/dashboard');
}
}

问题是,我不想直接在 index 中使用它,因为我需要在同一个文件的其他方法上使用它。

最佳答案

根据 Codeigniter 论坛,您不能再使用 redirect构造函数中的方法重定向到任何 Controller 。

请参阅以下链接以获取更多信息

https://forum.codeigniter.com/thread-74537.html

它明确指出 redirect()将返回一个类实例而不是设置标题,并且在 PHP 中实例化不同的类时不能返回另一个类的实例。

所以这就是为什么你不能使用 redirect构造函数中的方法。

相反,我可以建议您使用 header方法并重定向到您想要的 Controller 。

<?php namespace App\Controllers\Web\Auth;

class Register extends \App\Controllers\BaseController
{
function __construct()
{
if(session('username')){
header('Location: /dashboard');
}
}
}

如果这不可行或难以实现,您可以按照以下代码
<?php namespace App\Controllers\Web\Auth;

class Register extends \App\Controllers\BaseController
{
function __construct()
{
//call to session exists method
$this->is_session_available();
}

private function is_session_available(){
if(session('username')){
return redirect()->to('/dashboard');
}else{
return redirect()->to('/login');
}
}
}

第二个解决方案将比第一个解决方案更具交互性。并确保该方法是私有(private)的。这样它就不应该从其他类实例中调用。

社区团队还提供了一个解决方案来查看 controller filter .

https://codeigniter4.github.io/CodeIgniter4/incoming/filters.html

请参阅线程。我希望它可以帮助您找到更好的解决方案。

关于php - 未重定向到 Codeigniter 4 中的特定 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60476570/

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