首页 > 解决方案 > 使用 form_open 函数将 get 参数添加到 URL?

问题描述

我尝试实现标准的 PHP 逻辑来添加、编辑文章到博客,所以我有add 方法

public function add()
{
    $this->load->model('admin/Blog_Model');

    if (!empty($this->input->post())) {
        $user = $this->Blog_Model->addPost($this->input->post());
    }

    $this->getForm();
}

编辑方法:

public function edit($id = '')
{
    $this->load->model('admin/Blog_Model');

    if (!empty($this->input->post())) {
        var_dump($id); exit;
        $user = $this->Blog_Model->editPost($this->input->post(), $id);
    }

    $this->getForm($id);

}

getForm 方法:

public function getForm($id = '')
{
    if (!empty($id)) {
        $post = $this->Blog_Model->getPost($id);
        $data['action'] = 'admin/blog/edit';
    } else {
        $data['action'] = 'admin/blog/add';
    }

    $data['formTitle'] = array(
        'name'          => 'title',
        'id'            => 'content-title',
        'value'         => isset($post['title']) ? $post['title'] : '',
        'placeholder'   => 'Заглавие',
        'class'         => 'form-control'
    );

    $data['formContent'] = array(
        'name'          => 'content',
        'id'            => 'content-blog',
        'value'         => isset($post['content']) ? $post['content'] : '',
        'placeholder'   => 'Съдържание',
    );

    $data['formButton'] = array(
        'type' => 'submit',
        'content'=> 'Изпрати',
        'class'=> 'btn btn-primary btn-block btn-flat'
    );

    $data['head'] = $this->load->view('admin/head', NULL, TRUE);
    $data['left_column'] = $this->load->view('admin/left_column', NULL, TRUE);

    $this->load->view('admin/header', $data);
    $this->load->view('admin/blog_form', $data);
    $this->load->view('admin/footer');

}

和带有表单的blog_form 视图

    <div class="box-body pad">
        <?php echo form_open($action); ?>

        <div class="box-body">
        <div class="form-group">
          <label for="content-title">Заглавие:</label>
           <?php echo form_input($formTitle); ?>
        </div>
        <div class="form-group">
            <label for="content_blog">Съдържание:</label>
            <?php echo form_textarea($formContent); ?>
        </div>
        <div class="col-xs-12 col-md-3 pull-right">
            <?php echo form_button($formButton); ?>
        </div>
      </div>
      <?php echo form_close(); ?>
    </div>

所以..一切都很完美,但我对这部分有疑问:

    if (!empty($id)) {
        $post = $this->Blog_Model->getPost($id);
        $data['action'] = 'admin/blog/edit';
    } else {
        $data['action'] = 'admin/blog/add';
    }

如果是编辑,我想发送GET 参数之类的id 。我认为问题在于我没有使用标准 GET 参数而不是 site_url 函数,当我在这里显示所有文章时:

            <?php foreach ($posts as $post) { ?>
            <tr>
              <td><?php echo $post['id']; ?></td>
              <td><?php echo $post['title']; ?></td>
              <td><?php echo $post['content']; ?></td>
              <td><div class="btn-group">
                  <a href="<?php echo site_url('admin/blog/edit/'.$post['id']); ?>" class="btn btn-success">Редактирай</a>
                  <a href="<?php echo site_url('admin/blog/delete/'.$post['id']); ?>" class="btn btn-danger">Изтрий</a>
                </div></td>
            </tr>
            <?php } ?>

标签: phpcodeignitercodeigniter-3

解决方案


尝试改变

if (!empty($id)) {
    $post = $this->Blog_Model->getPost($id);
    $data['action'] = 'admin/blog/edit';
} else {
    $data['action'] = 'admin/blog/add';
}

if (!empty($id)) {
    $post = $this->Blog_Model->getPost($id);
    $data['action'] = 'admin/blog/edit/'.$id; // pass $id to edit controller
} else {
    $data['action'] = 'admin/blog/add';
}

推荐阅读