2010-11-05 36 views
1

我有一个编辑视图,其URL是/ group/edit/1,其中1是动态的组ID。具有动态参数的codeigniter视图

我在控制器验证表单数据:

if ($this->form_validation->run() == FALSE) 
{ 
    $this->load->view('group/edit', $data); 
} 

我如何通过参数id“1”这个观点?

以下选项不起作用,因为URL必须是组/编辑/ 1

$this->load->view('edit', $data); 

回答

0

这是什么意思?

$this->load->view('group/edit/'.$parameter, $data); 

这将使加载1,因为你只是定义视图文件

每CodeIgniters的路径引用这是格式: $this->load->view('folder_name/file_name');

http://codeigniter.com/user_guide/general/views.html

不当然,如果你对路由vs视图感到困惑,这里有一个快速的区别:

如果你想http://www.example/group/edit/10 那么你需要一个路线设置,而不是一个视图。

如果你想要http://www.example/并显示main.php页面中的内容(在你的视图文件夹中),那么你在你的主控制器中做$this->load->view('main');

+0

试了一下。这是行不通的。我收到此错误消息:“无法加载所请求的文件:group/edit/10.php” – user361697 2010-11-05 15:37:18

+0

试过了。这是行不通的。我收到此错误消息:“无法加载所请求的文件:group/edit/10.php” – user361697 2010-11-05 15:38:17

+0

在文件夹组/ edit /中是否有名为1.php的文件?如果不是,那是你的问题。或者你描述的是“路由”问题而不是“查看文件”问题?你可能会混淆两者。 – Jakub 2010-11-05 15:38:38

2

你在考虑这个错误。你想有一个名为edit.php的视图,并将数字1传递给它,或者更重要的是,你想从你的模型中获得1的数据,并将你的模型的返回值传递给你的视图。试想一下:

控制器

function edit($id) 
{ 
    $data['item_info'] = $this->whateverModel->getItem($id); 
    $this->load->view('edit', $data); 
} 

然后在你的编辑视图,您可以参考的数据是这样的:

视图

echo $item_info['id']; 
echo $item_info['name']; //or whatever you pass back from the model 
+0

这是个好主意。如果存在验证错误,我想重新加载编辑视图与URL“组/编辑/ 1”中的ID?记得我正在使用自我提交到“组/编辑”页面。这次URL中的$ id不存在,控制器抱怨它,因为$ id在“功能编辑($ id)”中不再有效,在这个URL变为“group/edit”之后,我认为其中一个选择是自动提交到“group/edit/1”。要遵循? – user361697 2010-11-05 16:50:33

+0

当然,为什么不呢?在edit()方法中可以有一些逻辑来检查它是否处于表单提交的中间,然后可以相应地调整视图。 – treeface 2010-11-05 16:55:38

0

这是我我在做。这可以接受吗?

控制器动作:

function edit($id) 
{ 
$group_q = $this->db->query("SELECT * FROM groups WHERE id = ?", array($id)); 
$group_data = $group_q->row(); 

    /* Form fields */ 
    $data['name'] = array(
     'name' => 'name', 
     'id' => 'name', 
     'value' => $group_data->name, 
    ); 
    $options = array("A", "B", "C", "D"); 
    $data['group_parent'] = $options; 
    $data['group_parent_status'] = $group_data->parent_id; 
    $data['group_id'] = $id; 

    /* Form validations */ 
    $this->form_validation->set_rules('name', 'Name', 'trim|required|min_length[2]'); 

    if ($this->form_validation->run() == FALSE) 
    { 
     if ($this->input->post('submit', TRUE)) 
     { 
      $data['name']['value'] = $this->input->post('name', TRUE); 
      $data['group_parent_status'] = $this->input->post('group_parent', TRUE); 
     } 
     $this->load->view('group/edit', $data); 
    } 
    else 
    { 
     $data_name = $this->input->post('name', TRUE); 
     $data_parent_id = $this->input->post('group_parent', TRUE); 
     $data_id = $id; 

     if (! $this->db->query("UPDATE groups SET name = ?, parent_id = ? WHERE id = ?", array($data_name, $data_parent_id, $data_id))) 
     { 
      $this->session->set_flashdata('error', "Error"); 
      $this->load->view('group/edit', $data); 
     } else { 
      $this->session->set_flashdata('message', "Success"); 
      redirect('account'); 
     } 
    } 
    return; 
} 

查看文件:

<?php 
echo form_open('group/edit/' . $group_id); /***** NOTE THIS STEP *****/ 
echo "<p>"; 
echo form_label('Name', 'name'); 
echo "<br />"; 
echo form_input($name); 
echo "</p>"; 
echo "<p>"; 
echo form_label('Parentp', 'group_parent'); 
echo "<br />"; 
echo form_dropdown('group_parent', $group_parent_active); 
echo "</p>"; 
echo form_hidden('group_id', $group_id); 
echo form_submit('submit', 'Submit'); 
echo form_close(); 

>