【问题标题】:CodeIgniter 3 redirect function not workingCodeIgniter 3 重定向功能不起作用
【发布时间】:2016-02-14 15:26:45
【问题描述】:

我正在对我在 CI2 中工作的 CMS 进行重新编码和更新到 CI3,而在我的一生中,我无法让我的重定向功能在 CI3 上为我工作。

除了重新设计我的模型之外,到目前为止,我的代码与我的 CI2 代码相同。最初我怀疑我的布局挂钩是罪魁祸首,但我已经完全禁用了他,我仍然没有得到任何结果。

public function login ()
{
    //var_dump(logged_in());
    //if (logged_in())
        redirect('/user/');
}

以上是我目前的全部登录功能,来自我的用户控制器。为了查明这个问题,我删除了所有其他代码。我什至评论了if 声明,认为它甚至可能是罪魁祸首。没有。

我的logged_in() 函数返回 TRUE 或 FALSE,具体取决于我的用户会话中设置的某些内容。这似乎运行良好。据我所知,我的配置设置看起来不错。我已经自动加载了 URI 助手,并且其他 URI 助手方法正常运行。

现在是奇怪的部分。当我访问 /user/login 时,不仅我的页面不重定向,如果我在重定向之前取消注释 var_dump()(返回 true),并重新注释它,页面不会更新,我有bool(true) 在我的屏幕上无论如何。如果var_dump 被评论并且我打开一个新标签到users/login 它根本不会加载任何东西,它只是作为一个新标签挂出。

编辑:我忘了提到当我使用“刷新”标志 (redirect('/user/', 'refresh');) 时,它只会将我带到 about:blank 页面。

Edit#2:我已将 CI3 文件复制到一个新的“项目”中,即使是那些不会使用内置 Welcome_Message 视图/控制器组合重定向的文件。

【问题讨论】:

  • 您是否遵循CI3中的命名约定??
  • 我的所有其他代码功能(到目前为止......)正确,我看不到重定向如何根据命名约定变得如此无效。但是,我的login 函数是class User extends Front_Controller 的一部分,而Front_Controller 扩展了MY_Controller。
  • MY_Controller 在核心中??
  • 我的重定向现在将我带到他们被调用的控制器的 index() 。也没有帮助。
  • 正确,它在核心中。 MY_Controller 文件包含 MY_Controller、Front_Controller 和 Admin_Controller。

标签: php codeigniter redirect


【解决方案1】:

在我从函数中删除 echo 语句和 print_r 之前,redirect('Admin/index') 无法正常工作。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。
【解决方案2】:

添加 ob_start();到控制器

<?php
ob_start();
defined('BASEPATH') OR exit('No direct script access allowed');

class Cart extends CI_Controller {
 // code here

}

【讨论】:

  • 感谢这个和那些想知道的人:这通常用于页面可以在他们已经“发送”一些内容之后发送标题(即,决定在呈现一个中途重定向页)
【解决方案3】:

经过多次反复试验,我发现了我的问题。当我执行var_dump(base_url)时,我发现我是$_SERVER['SERVER_ADDR'],因为我在本地工作,所以是::1。我学到的是 base_url 不像在 CI2 中那样工作。悲伤熊猫。

Base_url 配置变量设置不正确。在config/config.php 我的base_url 是使用单引号设置的。允许 CI3 猜测协议,它会默认为$_SERVER['SERVER_ADDR'],因为我在本地工作,所以它会返回::1。此外,当我将变量设置为'http://localhost/supersecretname' 时,使用单引号会出现与使用自动SERVER_ADDR 时完全相同的问题

由于睡眠剥夺的一些奇迹,我在这里尝试了许多不同的值,并且在某些时候我从单引号切换到双引号。

因此,找到了解决方案。

$config['base_url'] = "http://localhost/supersecretname";

【讨论】:

  • 在重定向参数 url 上添加双引号也对我有用。
【解决方案4】:

在重定向功能中添加base_url()。

 redirect(base_url().'user', 'refresh');

【讨论】:

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