php - 构造函数控制器中的重定向不起作用codeigniter4
问题描述
如何在 Codeigniter 4 的控制器中的构造函数内进行重定向?我制作了这段代码但不起作用
function __construct()
{
if(!isset($_SESSION['a']))
{
return redirect('index.php/login');
}
}
解决方案
这里有两件事,一是你不应该在 codeigniter 4 控制器中使用 __construct 魔术方法。相反,您应该使用 initController 方法,如下所示:
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
}
您应该研究的另一件事是过滤器。Codeigniter 4 中引入的一项新功能可以解决您刚才描述的确切问题。
您需要在控制器运行之前或之后检查某些内容。
以下是有关如何创建过滤器的示例:
<?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)
{
if(!isset($_SESSION['a'])) {
return redirect()->to('/login');
}
}
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
// Do something here
}
}
然后你应该在你的 app/config/Filter.php 中配置它,你应该配置别名和你希望你的过滤器运行的控制器:
public $aliases = [
'csrf' => \CodeIgniter\Filters\CSRF::class,
'toolbar' => \CodeIgniter\Filters\DebugToolbar::class,
'honeypot' => \CodeIgniter\Filters\Honeypot::class,
'checkLogin' => \App\Filters\CheckLogin::class,
];
public $filters = [
'checkLogin' => ['before' => ['dashboard']],
];
在这种情况下,我在仪表板控制器中使用它,但您可以随意制作。
推荐阅读
- javascript - 这在 JavaScript 中是什么意思: var controller = controller || {};
- css - css 打印媒体布局,带有标题和从上到下流动的两列布局
- c# - 如何使我的机器人列表服务器位于其中?
- c++ - 初始化列表初始化的类 std::array 成员变量
- arrays - Swift 是否有任何简单的方法来获取二维数组中的列?
- java - 通过 Spring Boot 调用 AirTable Rest API 返回 401
- python - 如何将一个变量值嵌入到另一个变量中?
- android - 无法在 Fragment 的 onCreateView 方法中更改 TextView 的文本
- excel - 从 VBA 类中的数组成员中获取对象
- powerbi - 按国家/地区划分的节假日 Power BI 工作时数