加入两个模型/控制器以在一个页面上允许两个视图

时间:2013-12-18 22:00:34

标签: php codeigniter

我已安装此simple-task-board codeigniter app from github。该应用程序有3个主页

  1. 显示项目链接的仪表板
  2. 显示指向任务的链接的项目视图
  3. 包含单个任务信息的任务视图
  4. 项目详细信息在自己的模型和控制器中设置,任务也是如此。目前,项目视图显示了一个任务列表,但为了添加新任务,它必须将您传递到从任务MVC加载的另一个视图。

    我的问题是在项目视图中获取“添加任务”表单的最佳方法是什么。我对MVC相对较新,但我知道我不应该尝试使用当前设置我要求的内容,即我不应该尝试从另一个控制器加载视图。最好的策略是尝试加入两个独立的MVC,还是我应该放弃尝试这样做并从头开始重写整个事情?

    我确实尝试使用库将控制器类从一个MVC传递到另一个MVC但最终导致了许多数据库错误。我假设这不是一个好计划?


    更新 - 添加额外代码:

    public function tasks($project_id)
    {
        $this->load->helper('stb_date');
        $this->load->helper('tasks');
    
        // Check permission
        if(!$this->usercontrol->has_permission('project', 'tasks'))
            redirect('dashboard');
    
        // Load tasks
        $this->load->model('task_model');
        $tasks = $this->task_model->get($project_id);
    
        foreach ($tasks as $task) {
            if ($task['status'] == 0) {
                $data['stories'][] = $task;
            } elseif ($task['status'] == 1) {
                $data['tasks'][] = $task;
            } elseif ($task['status'] == 2) {
                $data['tests'][] = $task;
            } elseif ($task['status'] == 3) {
                $data['done'][] = $task;
            }
        }
    
        // Load project info
        $this->load->model('project_model');
        $project = $this->project_model->get($project_id);
    
        $this->title = "Project: {$project['name']}";
        $this->menu = 'dashboard|edit_project|new_task';
    
        $data['project_id']    = $project_id;
    
        $data['current_user'] = $this->session->userdata('user');
    
        $db_users = $this->project_model->get_related_users($project_id);
        $users = array();
        foreach ($db_users as $user) {
            $users[$user['id']] = $user;
        }
        $data['users'] = $users;
    
        // Load text helper to be used in the view
        $this->load->helper('text');
    
        // Load View
        $this->load->view('task_board', $data);
    
    
        //new code added here
        $task_data['parent_id']      = 0;
        $task_data['title']          = '';
        $task_data['description']    = '';
        $task_data['priority']       = '2';
        $task_data['due_date']     = '';
    
        $project = '1';
        $task_data['project_id'] = $project;
        $task_data['users']      = $this->task_model->get_related_users($project);
        $task_data['user_id']    = $this->session->userdata('user');
        $task_data['tasks']      = $this->task_model->get_hierarchy($project);
    
        if($this->error)
            $task_data['error'] = $this->error;
        $task_data['task_data'] = $this->load->view('task_add',$task_data,true);
    }
    

1 个答案:

答案 0 :(得分:1)

我使用CI非常多,而且有点像它但请注意,如果你刚刚开始使用MVC。过去维护它的公司正在寻找新的所有者:http://ellislab.com/blog/entry/ellislab-seeking-new-owner-for-codeigniter

至于你的问题,这个视图看起来像是你要复制/移动的形式:https://github.com/oscardias/Simple-Task-Board/blob/master/application/views/task_add.php

这一切都很简单,但第91-93行有一些隐藏的ID,你可能在项目视图页面上没有。在选择视图之前,您无法获得它。因此,您可能希望稍微重写一下,以包含项目的下拉列表或将任务添加到的内容。

我可能会在项目页面中调用task_add.php视图,因此您没有两个副本。如果$ project_id存在,则显示隐藏字段,否则显示项目下拉列表。

视图与控制器或模型之间并没有真正的关联。通常,控制器是中间人,控制视图获取的数据(通常由模型提供)。