Codeigniter 3博客应用程序:重定向到更新的帖子失败

时间:2018-04-27 19:46:20

标签: php codeigniter redirect

我正在使用Codeigniter 3.1.8中的基本(只有2个表: authors posts )博客应用程序。

我有一个编辑帖子功能,使用更新表单:

<?php echo form_open("posts/update"); ?>
      <input type="hidden" name="id" id="pid" value="<?php echo $post->id; ?>">
      <div class="form-group <?php if(form_error('title')) echo 'has-error';?>">
        <input type="text" name="title" id="title" class="form-control" placeholder="Title" value="<?php echo $post->title; ?>">
        <?php if(form_error('title')) echo form_error('title'); ?> 
      </div>
      <div class="form-group <?php if(form_error('desc')) echo 'has-error';?>">
        <input type="text" name="desc" id="desc" class="form-control" placeholder="Short decription" value="<?php echo $post->description; ?>">
        <?php if(form_error('desc')) echo form_error('desc'); ?> 
      </div>
      <div class="form-group <?php if(form_error('body')) echo 'has-error';?>">
        <textarea name="body" id="body" cols="30" rows="5" class="form-control" placeholder="Add post body"><?php echo $post->content; ?></textarea>
        <?php if(form_error('body')) echo form_error('body'); ?> 
      </div>
      <div class="form-group">
        <input type="submit" value="Save" class="btn btn-block btn-md btn-success">
      </div>
<?php echo form_close(); ?>

Posts_model 模型中,我有负责更新帖子的方法:

public function update_post() {
    $data = [
        'title' => $this->input->post('title'),
        'description' => $this->input->post('desc'),
        'content' => $this->input->post('body')
    ];
    $this->db->where('id', $this->input->post('id'));
    return $this->db->update('posts', $data);
}

在Posts控制器中,我有两种方法,用于编辑和更新帖子:

public function edit($id) {
    $data = $this->Static_model->get_static_data();
    $data['post'] = $this->Posts_model->get_post($id);
    $data['tagline'] = 'Edit the post "' . $data['post']->title . '"';
    $this->load->view('partials/header', $data);
    $this->load->view('edit');
    $this->load->view('partials/footer');
}

public function update() {
    $this->Posts_model->update_post();
    // Redirect to the updated post

}

在我的update()方法中,我无法重定向到更新的帖子。 redirect($this->agent->referrer());行只会将我带回更新表单。我想重定向的地方是刚刚更新的帖子。我该怎么做?

1 个答案:

答案 0 :(得分:1)

应该在您的控制器中处理发布变量:

public function update() {
    $id = $this->input->post('id');
    $data = [
        'title' => $this->input->post('title'),
        'description' => $this->input->post('desc'),
        'content' => $this->input->post('body')
    ];
    // Update post
    $this->Posts_model->update_post($id, $data);
    // Redirect to the updated post
    redirect('posts/post/' . $id);
}

型号:

public function update_post($id, $data) {
    $this->db->where('id', $id);
    return $this->db->update('posts', $data);
}

注意:如果你想按自己的方式去做,那么只需在模型函数中返回id,并根据update()

中函数的返回值重定向