【问题标题】:CodeIgniter 4 redirect function not workingCodeIgniter 4 重定向功能不起作用
【发布时间】:2020-03-01 14:55:14
【问题描述】:

注销后,我尝试重定向到主页。我尝试了几种方法,但没有重定向。

class User extends BaseController
{
    public function __construct()
    {
        helper('url');
    }

用于注销功能。我用了三种方式

redirect('/');

header("Location:".base_url());

route_to('/');

【问题讨论】:

  • 这能回答你的问题吗? Redirect with CodeIgniter
  • @MartinDimitrov 我已经试过了。在 CodeIgniter 4 中不工作

标签: php codeigniter-3 codeigniter-4


【解决方案1】:

根据 CI 4

使用

return redirect()->to('url'); 

如果你使用路由,那么使用

return redirect()->route('named_route');

【讨论】:

  • 你是对的,但是我们如何像在 CI 3 redirect('conroller/method') 中那样重定向到特定的控制器?我不认为我们应该这样做 return redirect()->to(base_url().'/public/conroller/method','refresh'); ?
  • @Samiul plz 你能显示代码吗,为什么不工作?
  • 任何想要强制重定向路由的人,您可以通过redirect('<route>','location',304)->send(); 重定向函数创建RedirectResponse 对象,该对象由CI 运行时使用,并且该类扩展到MessageInterface。因为只有控制器方法除外来创建消息,即响应和请求对象,所以它默认创建适当的响应对象,然后调用适当的发送方法。希望这可以帮助任何被文档困住的人。
【解决方案2】:

代码点火器中的重定向语句使用重定向头语句将用户发送到指定的网页。 该语句位于 URL 帮助程序中,该帮助程序以下列方式加载:

 $this->load->helper('url');

重定向函数加载在函数调用的第一个参数中指定的本地 URI,并使用配置文件中指定的选项构建。

第二个参数允许开发者使用不同的HTTP命令来执行重定向“位置”或“刷新”。

根据 Code Igniter 文档:“定位速度更快,但在 Windows 服务器上有时可能会出现问题。”

例子:

if ($user_logged_in === FALSE)
{
 redirect('/account/login', 'refresh');
}

原答案:https://stackoverflow.com/a/725200/5700401

【讨论】:

  • CI4 默认已经自动加载了。在这里不行。
【解决方案3】:

在 codeigniter 4 中,redirect()->to() 返回一个 RedirectResponse 对象,您需要从控制器返回该对象以进行重定向。

例如

class Home extends BaseController {
    public function index() {
        return redirect()->to('https://example.com');
    }
}

【讨论】:

    【解决方案4】:

    我用这个,效果很好

    return redirect()->to(site_url());
    

    【讨论】:

      【解决方案5】:

      如果你找到:

      {0, string} route cannot be found while reverse-routing

      这个错误:

      Please Go to system\HTTP\RedirectResponse Line no 91 :

      变化:

      throw HTTPException::forInvalidRedirectRoute($route);
      

      收件人:

      return $this->redirect(site_url('/Home'));  
      (dashboard after login)
      

      【讨论】:

        【解决方案6】:

        我是 CI4 的新手。就我而言,我必须在 App.php 中正确设置 $baseURL。比如你本地开发的端口设置不正确,就会挂掉。

        例如。 public $baseURL = 'http://localhost:8888/';

        【讨论】:

          【解决方案7】:

          值得一提的是,与之前的 CI3 redirect() 函数不同,这个函数必须从 Controller 中调用。例如,它在库中不起作用。

          2021 年更新

          实际上是可以做到的!只需检查返回的响应是一个对象并返回它。因此,如果库返回 RedirectResponse,请使用以下代码对其进行检查,并在适用时返回。

          if (!empty($log) && is_object($log)){
              return $log;
          }
          

          如果有可能返回另一个对象,您当然可以使用get_class() 来确保该对象是RedirectResponse 的类型。

          【讨论】:

            猜你喜欢
            • 2016-02-14
            • 1970-01-01
            • 2020-03-01
            • 2014-01-13
            • 1970-01-01
            • 2014-09-07
            • 2018-12-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多