Не перенаправлен на указанный c URL в Codeigniter 4 - PullRequest
1 голос
/ 01 марта 2020

Почему когда я что-то перенаправляю через конструктор моего контроллера Codeigniter 4, он не работает?

<?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');
        }
}

Дело в том, что я не хочу использовать его непосредственно внутри индекса, потому что он мне нужен для другого метода того же файла.

1 Ответ

2 голосов
/ 01 марта 2020

Согласно форуму 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

Пожалуйста, обратитесь к теме. Я надеюсь, что это может помочь вам найти лучшее решение.

...