codeigniter-4 - Codeigniter redirect()->to() 在 __construct() 中不起作用
问题描述
我的控制器中有代码
public function __construct()
{
return redirect()->to('/auth');
$this->validation =
\Config\Services::validation();
$this->title = 'Header Menu';
$this->controller = 'user';
}
public function index()
{
$data = [
'title_prefix' => 'Profil',
'title' => $this->title,
'controller' => $this->controller,
'button_add' => false,
'validation' => $this->validation
];
return view('user/index', $data);
}
它仍然显示视图('用户/索引')。如何在 __construct() 中返回 redirect()->to('/auth') ?对不起,我英语说得不好
解决方案
redirect()
这是在构造函数中不起作用的预期行为。
redirect()
在 CI4 中不仅设置标头,还返回一个 RedirectResponse 对象。
问题是:在你的控制器的构造函数中,你不能返回其他东西的实例。您正在尝试构建控制器而不是 RedirectResponse。
好的做法是使用控制器过滤器
或者,redirect()
如果您只想在此端点处重定向用户,则可以在 index 函数内部添加。
这是一个适合您需要的过滤器示例:
注意您的 CI 版本。$arguments
从 4.0.4 开始需要该参数。否则你必须删除它
<?php
namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;
class AuthFilter implements FilterInterface {
public function before(RequestInterface $request, $arguments = null) {
return redirect()->to('/auth');
}
//--------------------------------------------------------------------
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null) {
}
}
并在您app/Config/Filters
编辑这两个变量以激活您的过滤器:
public $aliases = [
'auth' => \CodeIgniter\Filters\AuthFilter::class,
];
public $globals = [
'before' => ['auth' => 'the_routes_you_want_to_redirect']
];
推荐阅读
- javascript - Next.js - 使用组件级 scss (component.module.scss) 仅更改父类以使用 style['className']
- sql - SQL ORACLE SUM FUNCTION
- java - Java:保存递归本地计数器的值
- python - HeroKu Discord.py.json 没有在 GitHub 上更新
- css - 导航栏移动尺寸问题
- c++ - 广度优先搜索。顶点是否可以具有具有不同父级的相邻顶点并且已被发现但未处理
- java - 为什么我的 RecyclerView 不显示任何内容?
- discord.js - 每当我输入“$effect [pokemon type]”时,Discord 机器人都没有反应
- lotus-notes - 更改传入外部电子邮件的徽标
- html - 设置颜色输入的高度