Согласно форуму Codeigniter, вы больше не можете использовать метод redirect
в конструкторе для перенаправления на любой из контроллеров.
Для получения дополнительной информации см. Ссылку ниже
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
Пожалуйста, обратитесь к теме. Я надеюсь, что это может помочь вам найти лучшее решение.