Codeigniter:一个用于添加和编辑帖子的视图

时间:2012-07-24 21:42:42

标签: php codeigniter

我正在使用Codeigniter中的CMS,其中一个主要部分是用于创建和编辑帖子的表单。

我一直在计划为两者使用相同的视图文件,因为所有元素都是共享的。唯一的区别是创建时表单是空白的,并且在编辑时填充它。这是正确的方法吗?

我正在考虑为每个方法设置一个方法,所以发布/创建和发布/编辑($ id)。

在post控制器的create方法中,我有所有这样的表单数据(用于错误):

  $this->data['item_title'] = array(
    'name' => 'item_title',
    'id' => 'item_title',
    'type' => 'text',
    'value' => $this->form_validation->set_value('item_title'),
  );

我正在考虑改变保存数据库值而不是set_value()的值,所以像这样:

public function edit($id) {

$post_data = $this->post_model->get_post_data($id)

      $this->data['item_title'] = array(
        'name' => 'item_title',
        'id' => 'item_title',
        'type' => 'text',
        'value' => $post_data['post_title'],
      );
}

我是在正确的轨道上还是有更好的方法来解决这个问题?我应该只使用2次观看吗?

4 个答案:

答案 0 :(得分:7)

我使用由新的编辑控制器操作共享的部分_form.php。在两个动作上我有相同的验证,所以我将它们移动到控制器构造函数,然后对于每个输入我只使用三元运算符,说明是否提供了现有值$title,然后使用<input>值填充它,否则使用codeigniter set_value()帮助程序填充验证值。

<input type="text" name="title" value="<?php echo isset($title) ? set_value("title", $title) : set_value("title"); ?>" />

答案 1 :(得分:2)

我通常使用一个带有一些变量的视图。可以从服务器的数据设置字段的值,也可以将它们留空。根据是否提供数据,我会更改表单将使用的操作,因为它可能正在添加或编辑。

这应该是最有效的方法,因为它使用了可重用性的概念:)

一个简单的例子

<form action="<?php echo !$data ? "admin/add" : "admin/edit" ?> method="post">
    <input type="text name="test" value="<?php echo $data['test'] ? $data['test'] : "" ?>" />
</form>

答案 2 :(得分:1)

我不是CodeIgniter的专家(在CakePHP上更好),但MVC的核心是一个动作有一个视图。

您没有理由将其放在一个视图中。 :)

答案 3 :(得分:0)

这当然是可能的,因为我一直这样做。

通常情况下,我会:

<强>动作

function edit($PageID = -1)
{
    $Page = new stdClass();
    if($PageID === -1)
    {
        $Page->Title = $Page->Description = $Page->Keywords = '';
        $Page->PageID = -1;
    }
    else
    {
        $this->load->model('page_model');
        $Page = $this->page_model->GetByPageID($PageID);
        if(empty($Page))
        {
            show_404();
            return;
        }
    }
    if($this->input->post('Save', true) !== false)
    {
        // perform validation
        if($PageID === -1)
        {
            // insert
        }
        else
        {
            // update
        }
    }
    $data = array
    (
        'Page' => $Page
    );
    $this->load->view('edit_page', $data);
}

查看

<?= form_open(); ?>
    <fieldset>
        <label for="title">Title: </label>
        <input type="text" name="title" id="title" value="<?= Form::Get('title', $Page->Title); ?>" />
        <br />
        <label for="description">Description: </label>
        <input type="text" name="description" id="description" value="<?= Form::Get('description', $Page->Description); ?>" />
        <br />
        <label for="keywords">Keywords: </label>
        <input type="text" name="keywords" id="keywords" value="<?= Form::Get('keywords', $Page->Keywords); ?>" />
        <br />
        <input type="submit" name="Save" value="Save" />
    </fieldset>
</form>

修改

抱歉,我应该提到,Form::Get不是CodeIgniter函数,而是我创建的函数。简单来说,它需要读取您需要阅读的Post值的路径。如果它不存在,即你没有发布,那么它只会显示第二个参数的值。

如果我可以为你挖出代码,我会发布它。