我已经开始使用 Codeigniter。因此,我有两个控制器任务和项目。在我的任务控制器中,我有一个编辑现有任务的功能,编辑任务后,我想重定向到项目控制器的显示方法,该方法将参数作为与任务关联的project_id。
这是我的任务控制器:
public function edit($task_id,$task_project_id){
$this->form_validation->set_rules('task_name', 'Task Name','trim|required');
$this->form_validation->set_rules('task_description', 'Task Description','trim|required');
if ($this->form_validation->run() == FALSE){
$result=$this->task_model->get_task($task_id);
$data['task_name']=$result->task_name;
$data['due_on']=$result->due_on;
$data['task_description']=$result->task_description;
$data['id']=$task_id;
$data['task_project_id']=$task_project_id;
$data['main_view']="tasks/edit_task";
$this->load->view('layout/user', $data);
} else {
$data['task_project_id']=$task_project_id;
$data['task_name']=$this->input->post('task_name');
$data['due_on']=$this->input->post('due_on');
$data['task_description']=$this->input->post('task_description');
$data['id']=$task_id;
if ($this->task_model->edit($data)){
$this->session->set_flashdata('task_edited' ,'Task Edited Succesfully');
redirect(projects/display/$task_project_id); THIS SEEMS TO BE THE PROBLEM .
}else{
$this->session->set_flashdata('task_edited_failure' ,'Task Not Edited Succesfully');
redirect(projects/edit);
}
}
}
这是我的项目控制器及其索引和显示功能:
public function index()
{
$data['projects']=$this->projects_model->get_projects();
$data['main_view']="projects/home_view";
$this->load->view('layout/user.php',$data);
}
public function display($project_id){
$data['task']=$this->task_model->get_tasks($project_id);
$data['project']=$this->projects_model->get_project($project_id);
$data['main_view']="projects/display";
$this->load->view('layout/user.php',$data);
}
因此,在我的任务控制器中,我尝试使用重定向(projects/display/$task_project_id(重定向到项目控制器的显示方法,因为项目控制器的显示功能display($project_id)
。但这将项目控制器的索引函数重定向到我。重定向有什么问题?我认为 CI 中的 URL 结构是controller/function/parameter1/parameter2
.
你在编写重定向函数时犯了错误。它应该如下所示。
redirect('projects/display/'.$task_project_id);
redirect('projects/edit');
redirect($uri = '', $method = 'auto', $code = NULL)
Codeigniter 中的 redirect(( 函数使用您在根目录中定义的 URL。不能直接跳转到控制器。