CodeIgniter - 页面变量在视图中未定义

时间:2014-03-06 10:24:21

标签: php codeigniter

我有点困惑。我也很确定这之前有用,但是......

这是一个非常基本的场景。通过$ data在控制器中定义的页面变量,但由于某种原因,它们在视图中不可用。除非我失明,否则我看不出代码有什么问题。

控制器功能(完全清晰):

function login()
{
    $data['page_title'] = 'Login title';
    $data['page_description'] = 'Login description';
    $data['page_keywords'] = 'login,keywords';
    $data['referer'] = $this->session->flashdata('referer');

    if($this->input->post('email',true) !== false)
    {
        $this->form_validation->set_rules('email', 'Email', 'trim|required|xss_clean');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_password');

        if($this->form_validation->run() == FALSE)
        {
            // Log failed attempt against IP address
            $this->bruteforce->log_fail( $this->input->ip_address() , $this->input->post('email',true) );
        }
        else
        {
            // Go to accounts home
            if($this->input->post('referer') != '')
            {
                redirect($this->input->post('referer'));
            }
            else
            {
                redirect('dashboard');
            }

        }
    }

    $this->load->view('login_view',$data);
}

因此,在正常页面加载时,所有这个控制器都会设置变量并加载视图。

视图(直到失败点)看起来如此:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">

<!-- Meta -->
<title><?php echo $page_title; ?></title>

但是我刚刚得到:

Message: Undefined variable: page_title

有什么想法吗? :■

编辑:

好的,所以我发现了一些奇怪的东西。

我正在查看上面的视图作为默认控制器,因此www.domain.com。但是,如果我通过直接转到其URL来查看它,在这种情况下:www.domain.com/access/login/它可以正常工作。我不确定为什么它会有所作为,但它似乎是原因的根源。但是在两种情况下都加载了相同的控制器。所以我仍然感到困惑。

编辑2:请参阅下面的答案。基本上错误的控制器正在加载,一个不应该存在的控制器仍然被一些重要的功能引用。卫生署。

2 个答案:

答案 0 :(得分:0)

尝试使用

function login()
{
    $data['page_title'] = 'Login title';
    $data['page_description'] = 'Login description';
    $data['page_keywords'] = 'login,keywords';
    $data['referer'] = $this->session->flashdata('referer');

    if($this->input->post('email'))
    {
        $this->form_validation->set_rules('email', 'Email', 'trim|required|xss_clean');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_password');
    }
        if($this->form_validation->run() == FALSE)
        {
            // Log failed attempt against IP address
            $this->bruteforce->log_fail( $this->input->ip_address() , $this->input->post('email',true) );

          $this->load->view('login_view',$data);
        }
        else
        {
            // Go to accounts home
            if($this->input->post('referer') != '')
            {
                redirect($this->input->post('referer'));
            }
            else
            {
                redirect('dashboard');
            }

        }

}

答案 1 :(得分:0)

好的,所以我不能100%确定发生了什么,但我找到了问题的根本原因。

我的default_controller文件中的routes.php设置为'login',而不是'access/login'。同样,我的访问控制器上的index()功能转发到'login',而不是'access/login'。让我感到困惑的是页面加载的原因。技术上'login'本身应该肯定会生成404(如果没有,那么为什么变量不可用)。所以仍然有点困惑,但至少问题得到了解决。为什么现在只出现这种情况,我仍然感到困惑。

编辑:我是个白痴。我在项目早期留下了一个“登录”控制器。所以仍然不确定为什么这个问题没有出现之前,但我至少知道为什么变量不起作用,因为一个完全不同的控制器正在加载!很抱歉浪费任何时间。