具有动态参数的codeigniter视图
我有一个编辑视图,其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);
这是什么意思?
$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');
。
你在考虑这个错误。你想有一个名为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
这是个好主意。如果存在验证错误,我想重新加载编辑视图与URL“组/编辑/ 1”中的ID?记得我正在使用自我提交到“组/编辑”页面。这次URL中的$ id不存在,控制器抱怨它,因为$ id在“功能编辑($ id)”中不再有效,在这个URL变为“group/edit”之后,我认为其中一个选择是自动提交到“group/edit/1”。要遵循? – user361697 2010-11-05 16:50:33
当然,为什么不呢?在edit()方法中可以有一些逻辑来检查它是否处于表单提交的中间,然后可以相应地调整视图。 – treeface 2010-11-05 16:55:38
这是我我在做。这可以接受吗?
控制器动作:
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();
>
试了一下。这是行不通的。我收到此错误消息:“无法加载所请求的文件:group/edit/10.php” – user361697 2010-11-05 15:37:18
试过了。这是行不通的。我收到此错误消息:“无法加载所请求的文件:group/edit/10.php” – user361697 2010-11-05 15:38:17
在文件夹组/ edit /中是否有名为1.php的文件?如果不是,那是你的问题。或者你描述的是“路由”问题而不是“查看文件”问题?你可能会混淆两者。 – Jakub 2010-11-05 15:38:38