今天重构项目中的代码的时候遇到了如题所示的问题,具体如下:
这里后台实现了一个控制器基类AdminBase,关键代码分别如下:
class AdminBase extends Base
{
protected function initialize()
{
parent::initialize();
if(!$this->is_login()) $this->redirect('admin/Login/login');//未登录
Login控制器中也有判断登录的语句:
class Login extends AdminBase
{
protected function initialize()
{
parent::initialize();
}
public function login()
{
if($this->check_admin_login())
$this->redirect('admin/Index/index');
return $this->fetch();
}
所有的控制器都要继承AdminBase基类控制器,当然包括Login控制器,这里就会出现如题所示的问题。
当你登录到后台的任何一个页面时,都会提前进行AdminBase的initialize检查登录操作,如果没有登录,就会跳到
Login控制器,好了跳到Login控制器之后,又将调用AdminBase的initialize 函数,这样就导致问题的所在了…
解决方案,要么Login不继承AdminBase,要么在Login中的必须写initialize(),但是不要执行父类的initialize()
protected function initialize(){
//做你想做的事情..
//不要使用parent::initialize();即可
}
所以Login修改以后的代码如下:
use think\Controller;
class Login extends Controller
{
protected function initialize()
{
parent::initialize();
}
public function login()
{
if($this->check_admin_login()) {
$this->redirect('admin/Index/index');
}
return $this->fetch();
}
问题解决
Comments