为什么每当我通过我的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');
}
}问题是,我不想直接在索引中使用它,因为它需要在同一个文件的其他方法上使用。
发布于 2020-09-23 08:16:43
在这种情况下,您甚至不应该在控制器中执行这种逻辑。这应该在过滤器中完成,而不是在控制器中完成。
所以你有你的控制器登记册了。
您应该在应用程序/过滤器文件夹中创建一个过滤器,类似于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://stackoverflow.com/questions/60476570
复制相似问题