实施例:
我有一篇文章观点。网址为:http://index.php/news/article/3
这实际上在我的article($id)
控制器中运行news
函数,并以3
作为参数。然后,该函数获取文章信息并将其显示在视图中。
在文章页面上,用户也可以登录。按下时会触发登录
在我的表单中提交按钮form_open('core/login')
...按钮... </form>
在函数中,我将用户登录并刷新当前视图,其中一些元素根据记录的用户而更改。问题是该URL现在是http://index.php/core/login
。显然我希望它是原始的URL。
是否有任何可能简单的解决方案来实现这一目标?感谢大家的阅读,并提前回复。
答案 0 :(得分:0)
在没有更多代码的情况下很难,但让我告诉你我的理论/接受这个:
默认控制器:
您和我的更多信息可以更具体,或者我们可以在IRC上进行讨论。
从控制器添加此代码我正在这一刻工作 - 我使用ion_auth库(您应该查找它,它非常好)。
这是我的默认控制器 - 你可以看到一些简单的逻辑加载了不同的视图/状态。
public function index(){
if ($this->data['auth_login'] ) {
/*is already signed in so just present the lobby?*/
$data['page_title'] = "HN Lobby";
$data['menuItems'] = nav_anchor_helper_authd();
$data['myUserID'] = $this->ion_auth->get_user_id();
$data['lobby_players'] = $this->lobby_model->get_players();
$this->load->view('template/public/header',$data);
$this->load->view('player_pages/nav_2',$data);
$this->load->view('player_pages/lobby',$data);
$this->load->view('template/scripts/main',$data);/*scraper and other scripts*/
$this->load->view('template/public/footer',$data);
} else {
/*request login*/
$data['page_title'] = "PLAY HN";
$data['menuItems'] = nav_anchor_helper();
$data['auth_rtnurl'] = current_url();
$data['auth_conturl'] = current_url(); /*for now just come back to same page where lobby should load - perhaps in future a semi gooey login? e.g where was user going - this could be the continue url in this var right here << */
$data['message_body'] = $this->session->flashdata('message');
$this->load->view('template/public/header',$data);
$this->load->view('template/public/nav_1',$data);
$this->load->view('public_pages/play',$data);
$this->load->view('template/public/footer',$data);
}
}
以下是我在登录函数中处理返回URL的方法: 登录/验证控制器:(使用ion_auth)
function login()
{
$this->data['title'] = "Login";
//validate form input
$this->form_validation->set_rules('identity', 'Identity', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
if ($this->form_validation->run() == true)
{
if ($this->ion_auth->login($this->input->post('identity'), $this->input->post('password'), $remember))
{
//if the login is successful
//redirect them back to the home page
$this->session->set_flashdata('message', $this->ion_auth->messages());
$rtnurl = $this->input->post('auth_conturl');
if(!$rtnurl || $rtnurl == ""){
$rtnurl = '/';
}
redirect($rtnurl, 'refresh');
}
这只是登录功能的摘录/段 - 但是你可以看到我利用代码点火器的“重定向”功能将用户推回到使用登录表单发布的返回URL(在使用current_url()函数查看/上一个控制器。
最后我的默认视图文件带有登录表单,向您展示我如何传递返回URL:
<div>
<h4>Login</h4>
<div id="infoMessage" class="errortext"><?php echo $message_body;?></div>
<?php echo form_open('auth/login', array('class' => 'form col')); ?>
<p>
<label for="identity">Email:</label> <input type="text" name="identity" value="" id="identity"> </p>
<p>
<label for="password">Password:</label> <input type="password" name="password" value="" id="password"> </p>
<p>
<label for="remember">Remember Me:</label> <input type="checkbox" name="remember" value="1" id="remember"> </p>
<p><input type="submit" name="submit" value="Login »"></p>
<p>
<a href="<?php echo site_url(); ?>/auth/forgot_password">Forgot password</a> ?
</p>
<input type="hidden" name="auth_rtnurl" value="<?php echo $auth_rtnurl; ?>"/>
<input type="hidden" name="auth_conturl" value="<?php echo $auth_conturl; ?>"/>
<?php echo form_close();?>
</div>