在这种情况下,您甚至不应该在控制器中执行这种逻辑。这应该在过滤器而不是您的控制器中完成。
所以你有你的控制器注册。
您应该在 app/filters 文件夹中创建一个过滤器,例如 checkLogin.php
该过滤器应具有以下结构:
<?php
namespace App\Filters;
use CodeIgniter\Filters\FilterInterface;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
class CheckLogin implements FilterInterface
{
/**
* Check loggedIn to redirect page
*/
public function before(RequestInterface $request, $arguments = null)
{
$session = \Config\Services::session();
if (session('username')) {
return redirect()->to('/dashboard');
}
}
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
// Do something here
}
}
然后在您的 app/config/Filters.php 中,您应该将过滤器添加到所需的控制器。
public $aliases = [
'csrf' => \CodeIgniter\Filters\CSRF::class,
'toolbar' => \CodeIgniter\Filters\DebugToolbar::class,
'honeypot' => \CodeIgniter\Filters\Honeypot::class,
'checkLogin' => \App\Filters\CheckLogin::class,
];
// List filter aliases and any before/after uri patterns
public $filters = [
'checkLogin' => ['before' => ['Register']],
];
有关过滤器以及如何使用的更多信息,请查看文档。
https://codeigniter.com/user_guide/incoming/filters.html?highlight=filters
然后,您甚至可以为其他控制器创建过滤器,以防用户未登录时重定向到该控制器。