如何在CodeIgniter中维护当前URL

时间:2013-12-28 23:44:51

标签: php codeigniter

再一次,我迷路了。我要提前开始讨论这个问题,因为我甚至不确定我真正想要的是什么。

实施例: 我有一篇文章观点。网址为:http://index.php/news/article/3 这实际上在我的article($id)控制器中运行news函数,并以3作为参数。然后,该函数获取文章信息并将其显示在视图中。

在文章页面上,用户也可以登录。按下时会触发登录 在我的表单中提交按钮form_open('core/login') ...按钮... </form>在函数中,我将用户登录并刷新当前视图,其中一些元素根据记录的用户而更改。问题是该URL现在是http://index.php/core/login。显然我希望它是原始的URL。

是否有任何可能简单的解决方案来实现这一目标?感谢大家的阅读,并提前回复。

1 个答案:

答案 0 :(得分:0)

在没有更多代码的情况下很难,但让我告诉你我的理论/接受这个:

默认控制器:

  1. 用户未登录 - 显示默认标题,内容,页脚
  2. 用户按登录,显示表单
  3. 用户已通过身份验证 - 是(继续)否(返回表单)
  4. 用户重定向('主页')'d
  5. 您的默认控制器/家庭控制器会检查是否已授权:如果已授权,则会显示已登录的标题,内容和登录的页脚 或者简单地将'loggedIN'作为$ data ['loggedIN']变量传递给视图 - 但这打破了MVC框架的意识形态。
  6. 您和我的更多信息可以更具体,或者我们可以在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 &raquo;"></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>