我有点困惑。我也很确定这之前有用,但是......
这是一个非常基本的场景。通过$ 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:请参阅下面的答案。基本上错误的控制器正在加载,一个不应该存在的控制器仍然被一些重要的功能引用。卫生署。
答案 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(如果没有,那么为什么变量不可用)。所以仍然有点困惑,但至少问题得到了解决。为什么现在只出现这种情况,我仍然感到困惑。