【问题标题】:Codeigniter4 redirect()->to() is not workingCodeigniter4 redirect()->to() 不工作
【发布时间】: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-&gt;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()-&gt;to('blabla'),因为这是您使用路由器调用的主要函数

标签: php codeigniter-4


【解决方案1】:

正如@ViLar 开始指出的那样,这就是您返回(或者更确切地说不返回)该 Response 对象的方式。

redirect()-&gt;to() 不会在被调用时立即执行重定向。它最终返回一个对象,必须由控制器本身返回才能工作

您将该对象从 admin_login_check() 返回到 index(),但随后在 index() 中完全忽略它;因此,Controller 永远不会真正接收或返回由调用 redirect() 创建的对象。

如果您要从嵌套函数调用中返回重定向,则需要确保 Response 对象返回一直到堆栈,以便调用的初始 Controller 方法实际上将其返回为嗯。

【讨论】:

    猜你喜欢
    • 2015-05-31
    • 2020-11-12
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2017-01-24
    • 1970-01-01
    • 2017-03-19
    相关资源
    最近更新 更多