CodeIgniter - 使用额外字符串重定向()到另一个页面以输出为html的方法?

时间:2014-01-19 02:41:58

标签: php codeigniter http-redirect

我正在使用CodeIgniter并尝试在运行动作网址后重定向回“控制器状态更新”...我可以更好地解释这一点。所以我有一个管理页面“示例.com / admin “我在” / admin / users “管理用户,当我删除用户时,它会转到”* / admin / delete_user *“。我希望它将BACK重定向到“ / admin / users ”,并添加一个像$ status_update这样的变量集,其中包含成功失败消息。< / p>

我怎样才能收到回到另一个视图的消息?这是我的简化代码。 * 我的完整代码实际上已经充满了安全措施,所以忽略它当前的缺乏。

class Admin extends CI_Controller {

    public function index(){
        $this->load->view('admin/admin');
    }     
    public function users(){                   // admin/users
        $this->load->model('user_model');
        $users = $this->user_model->get();
        $this->load->view('admin/users', ['users' => $users]);
    }
    public function delete_user($user_id){     // admin/delete_user
        $this->load->model('user_model');
        if ($this->user_model->delete($user_id) == true){
            $this->load->model('user_model');
            $users = $this->user_model->get();
            $this->load->view('admin/users', ['users' => $users]);

                // I WANT THIS TO GO BACK TO "/admin/users" WITH THE STATEMENT BELOW

            echo $user_id . ' has been deleted from the system';
        } else {
            echo 'Something went wrong trying to delete ' . $user_id;
        }
    }
}

我怎么能这样做?我可以看到这样的事情的唯一方法是将删除功能移动到用户功能并使用表单提交变量调用它,但我觉得可能有更好的方法。 我希望我的问题有道理。

更新

感谢tomexsans&amp; saurabh2836我最后用最后的一小部分来解决这个问题

我将实际调用移到了视图本身,因为从控制器向视图发送一个额外的数组并不顺利,但我也遇到了一个小问题,即闪存数据在请求中持续存在然后通过第二个引起问题的我用以下

解决了这个问题
<?php if ($this->session->flashdata('message') !== null){
        $_session_data = $this->session->flashdata('message');
        $message = $_session_data['message'];
        $status = $_session_data['status'];
        if ($status == 'success'){
            echo '<div class="alert-success"><strong>'.$message.'</strong></div>';
        } elseif ($status == 'failed'){
            echo '<div class="alert-danger"><strong>'.$message.'</strong></div>';
        }
        $this->session->unset_userdata('flash_message'); //this fixed data showing after another request.
    } ?>

更新2

对于希望使用此方法的未来用户,我发现了一个奇怪的偶然事件,如果您使用 标记发出请求,它将无法按您的想法显示(我感觉它有某种东西与浏览器缓存有关)所以要解决这个问题,你必须通过表单进行调用。这就是我实现方法的方式。

<form action="<?=site_url("admin/delete_user/{$_value->user_id}")?>" method="post">
    <button type="submit">Delete</button>
</form>

我知道它与链接相比有点多,但我不想依赖Javascript来提交表单。有另一个想法?

2 个答案:

答案 0 :(得分:4)

你也可以做到这个的快捷方式

检查以上答案

在控制器中

$this->session->set_flashdata('message','<p>'.$user_id . ' has been deleted from the system .$status</p>);

在视图中

   <?php if($this->session->flashdata('message')) echo $this->session->flashdata('message');?>

要使用此flashdata超过一次,您可以使用

$this->session->keep_flashdata('item');

答案 1 :(得分:1)

您可以使用flashdata

//sample with HTML

$data['message'] = '<p>'.$user_id . ' has been deleted from the system</p>';
$data['status'] = 'good';
$this->session->set_flashdata('message',$data);
redirect('admin/users');


//and on your controller admin users just get the message by:

$_session_data = $this->session->flashdata('message');
$data['message'] = $_session_data['message'];
$data['status'] = $_session_data['status'];
//load in view
$this->load->view('page',$data);

Sessions Class

了解详情