【发布时间】:2021-01-08 12:42:58
【问题描述】:
在 CI4 上,当管理员未登录时,我试图将用户重定向到 admin/login。
$this->session->isAdminLoggedIn 正在正常工作。但是当我转到admin/index 时,用户没有被重定向并且语句echo __METHOD__; 正在执行。我做错了什么?
<?php
namespace App\Controllers\Admin;
use CodeIgniter\Controller;
use App\Controllers\BaseController;
use Config\Services;
class Admin extends BaseController{
protected $session;
public function __construct(){
$this->session = Services::session();
}
private function admin_login_check(){
if ( !$this->session->isAdminLoggedIn ){
$R2 = urlencode( current_url() );
return redirect()->to('admin/login?r2='.$R2);
}
}
public function index(){
$this->admin_login_check();
echo __METHOD__;
}
}
【问题讨论】:
-
如果您返回
$this->admin_login_check(),重定向是否有效? -
你的意思是 return $this->admin_login_check();是的,它确实。但我不能使用它。即使 admin_login_check() 中的语句为 true,index() 仍然会结束执行。
-
尝试将
admin/login?r2='.$R2更改为/admin/login?r2='.$R2 -
它返回NULL。奇怪的是,如果我从admin_login_check()复制所有代码并将其粘贴到index()中,它工作正常。
-
问题是您在 CI4 的路由过程不知道的函数内返回一个 Response 对象。如果您希望重定向发生,您必须在索引函数中返回您的
redirect()->to('blabla'),因为这是您使用路由器调用的主要函数
标签: php codeigniter-4