我有一个相当标准的CI3网站启动并运行。我创建了自己的基本控制器,名为MY_Controller
,我的所有页面控制器都扩展了它。
MY_Controller.php
public function __construct() {
parent::__construct();
}
/**
* Display the view. This function wraps up all the teplates,
* sets the page title, adds all the requested Javascript and CSS,
* and passes along any data.
* @param string $view The name of the content view to display
* @param array $data (Optional) ÏAn array of any data to pass along
*/
protected function showView($view, $data = null) {
if ($data === null) {
$data = array();
}
// call all the template pieces
$this->load->view('header', $data);
$this->load->view('mainNav', $data);
$this->load->view($view, $data);
$this->load->view('footer', $data);
}
每个页面控制器在准备显示结果或其他任何内容时调用$this->showView($viewName, $data);
。
我的登录控制器上有一个表单,Login.php
。
Login.php有一个名为“submit”的方法。
public function submit() {
$cfg = array(
array(
'field' => 'username',
'label' => 'Username',
'rules' => 'required|trim|alpha_numeric|xss_clean|min_length[3]|max_length[50]'
),
array(
'field' => 'password',
'label' => 'Password',
'rules' => 'required|trim|alpha_numeric|xss_clean|min_length[3]|max_length[50]'
)
);
if ($this->form_validation->set_rules($cfg) === false) {
$this->showView("login");
} else {
$data = array(
'password' => $this->input->post('password')
);
if (filter_var($this->input->post('username'), FILTER_VALIDATE_EMAIL) === false) {
$data['username'] = $this->input->post('username');
} else {
$data['email'] = $this->input->post('username');
}
$user = $this->User->getUserFromLogin($data);
if ($user !== false) {
$sessionData = array(
'userName' => $user->userName,
'email' => $user->email,
'authToken' => $user->authToken,
'lastSeen' => date("Y-m-d")
);
// Add user data to session
$this->session->set_userdata('userLoggedIn', true);
$this->session->set_userdata('userData', $sessionData);
$this->showView("home");
} else {
$data = array(
'error_message' => 'User could not be loaded.',
);
$this->showView("login", $data);
}
}
}
我的登录视图,login.php
<div class="wrapper style1">
<article id="work">
<header>
<h2>Login!</h2>
<?=validation_errors();?>
</header>
<div class="container 50%">
<section>
<form method="post" action="login/submit">
<div>
<div class="row">
<div class="6u">
<input type="text" name="username" id="username" placeholder="username or email" value="<?=set_value('username');?>" />
</div>
<div class="6u">
<input type="password" name="password" id="password" placeholder="password" />
</div>
</div>
<div class="row">
<div class="12u">
<ul class="actions">
<li>
<input type="submit" value="Sign in!" />
</li>
</ul>
</div>
</div>
</div>
</form>
<footer>
<div>...or sign in with Facebook!</div>
<fb:login-button scope="public_profile,email" onlogin="checkLoginState();"></fb:login-button>
</footer>
</section>
</div>
</article>
</div>
成功提交表单后,我希望它能够将我重定向到home
,但是,它是localhost/login/submit
而不是localhost/home
。
与我的注销控制器一样,在注销时,它会导航到URI localhost/logout/logout
,生成404.
我无法弄清楚为什么它没有重定向到我在showView()
方法中指定的控制器。
我没有使用任何自定义路由技巧。
答案 0 :(得分:1)
showView方法只需加载您想要的值以及您发送的数据。我相信当你需要离开页面时,你正在寻找重定向,而不是像你那样只是重新渲染页面。
redirect($uri = '', $method = 'auto', $code = NULL)
如果这不足以满足您的需求,请包括您的路线和您的退出控制器,以了解您提到的其他方案中发生了什么。
答案 1 :(得分:0)
成功验证后,而不是
$this->showView("home");
您应该将其更改为redirect()
,
redirect("controller/method/parameters if any");
答案 2 :(得分:0)
有方法调用showview()
。要加载视图,您必须使用
$this->load->view("login");
以及重定向应该是
redirect('controller_name/method_name');