Как загрузить сеанс в Codeigniter 4 Constructor - PullRequest
0 голосов
/ 28 мая 2020

Так же, как в Codeigniter 3, где я могу ограничить пользователей из определенного контроллера, если не в сеансе, установив приведенный ниже код в конструкторе

if(! session()->get('username'))
    {
        return redirect()->to('/login');
    }

Когда я попробую то же самое в Codeigniter 4, он не будет работать , пока я не загружу это в каждый метод, прежде чем он заработает

1 Ответ

1 голос
/ 28 мая 2020

Вам необходимо инициализировать сеанс перед вызовом session()->get('yourvar').
Это должно работать:

$session = session();
$session()->get('username');

Однако, как говорится в вашем сообщении, если вам нужно проверить каждый контроллер, если они Если вам нужен сеанс или нет, вам обязательно стоит взглянуть на фильтры и создать собственный, который проверяет, есть ли сеанс или нет. https://codeigniter.com/user_guide/incoming/filters.html

Вероятно, это будет выглядеть так в app/Filters:

<?php

namespace App\Filters;

use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;

class LoginFilter implements FilterInterface {

    public function before(RequestInterface $request) {
        $session = session();
        if($session->has('username')) {
            return redirect()->to('/login'); 
        }
    }
    //--------------------------------------------------------------------

    public function after(RequestInterface $request, ResponseInterface $response) {
        // Do something here
        }

}

И если вы хотите реализовать фильтр, не забудьте объявить это в Config/Filters.php

// Makes reading things below nicer,
    // and simpler to change out script that's used.
    public $aliases = [
        'csrf'       => \CodeIgniter\Filters\CSRF::class,
        'toolbar'    => \CodeIgniter\Filters\DebugToolbar::class,
        'honeypot'   => \CodeIgniter\Filters\Honeypot::class,
        'login'      => \App\Filters\LoginFilter::class,
    ];

    // Always applied before every request
    public $globals = [
        'before' => [
            'login',
            //'honeypot'
        ],
        'after'  => [
            'toolbar',
            //'honeypot'
        ],
    ];
...