根据 Codeigniter 论坛,您不能再使用redirect
构造函数中的方法重定向到任何控制器。
请参阅以下链接了解更多信息
https://forum.codeigniter.com/thread-74537.html https://forum.codeigniter.com/thread-74537.html
它明确指出redirect()
将返回一个类实例而不是设置标头,并且在 PHP 中实例化不同的类时不能返回另一个类的实例。
所以这就是为什么你不能使用redirect
构造函数中的方法。
相反,我可以向您建议的是使用header
方法并重定向到您想要的控制器。
<?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');
}
}
}
第二个解决方案将比第一个解决方案更具交互性。并确保该方法是私有的。因此不应从其他类实例调用它。
社区团队也给出了解决方案来调查controller filter
.
https://codeigniter4.github.io/CodeIgniter4/incoming/filters.html https://codeigniter4.github.io/CodeIgniter4/incoming/filters.html
请参阅线程。我希望它可以帮助您找到更好的解决方案。