Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在codeigniter中实现mvc_Php_Model View Controller_Codeigniter - Fatal编程技术网

Php 如何在codeigniter中实现mvc

Php 如何在codeigniter中实现mvc,php,model-view-controller,codeigniter,Php,Model View Controller,Codeigniter,我已经使用codeIgniter 5个月了,我想改进我编写代码的方式。以下是控制器为用户提供的一种方法: function create_user(){ $user_data = array( 'username' => 'Username', 'firstname' => 'Firstname', 'middlename' => 'Middlename', 'lastname' => 'Lastnam

我已经使用codeIgniter 5个月了,我想改进我编写代码的方式。以下是控制器为用户提供的一种方法:

function create_user(){ 

         $user_data = array(
            'username' => 'Username', 'firstname' => 'Firstname',
            'middlename' => 'Middlename', 'lastname' => 'Lastname',
            'password' => 'Password', 'department' => 'Department', 
            'role' => 'Role'
        );

        foreach ($user_data as $key => $value) {
            $this->form_validation->set_rules($key, $value, 'required|trim');
        }

        if ($this->form_validation->run() == FALSE) {
            $departments = $this->user_model->list_departments();
            $it_roles = $this->user_model->list_roles(1);
            $tc_roles = $this->user_model->list_roles(2);
            $assessor_roles = $this->user_model->list_roles(3);

            $data['data'] = array('departments' => $departments, 'it_roles' => $it_roles, 'tc_roles' => $tc_roles, 'assessor_roles' => $assessor_roles);

            $data['content'] = 'admin/create_user';

            parent::error_alert();
            $this->load->view($this->_at, $data);

        } else {
            $username = $this->input->post('username');
            $salt = $this->bcrypt->getSalt();
            $hashed_password = $this->bcrypt->hash($this->input->post('password'), $salt);
            $fname = $this->input->post('firstname');
            $mname = $this->input->post('middlename');
            $lname = $this->input->post('lastname');
            $department = $this->input->post('department');
            $role = $this->input->post('role');

            $user_login     = array($username, $hashed_password, $salt);
            $user_profile   = array($fname, $mname, $lname);
            $this->user_model->register_user($user_login, $user_profile, $department, $role);

            $data['content'] = 'admin/view_user';

            parent::success_alert(4, 'User Sucessfully Registered!', 'You may now login using your account');


            $data['data'] = array('username' => $username, 'fname' => $fname, 'mname' => $mname, 'lname' => $lname, 'department' => $department, 'role' => $role);
            $this->load->view($this->_at, $data);
        }

    }
我基本上是在单个控制器中塞满了获取输入、输入验证、呈现错误或成功视图以及其他内容。更好的方法是什么,你建议我如何分解这个函数。有人说我应该在视图和控制器之间添加一个路由器/调度器来处理
POST
GET
COOKIE
会话
,但我不知道怎么做


任何有助于我掌握正确操作方法的代码示例和建议都将被接受为答案。

您还需要在POST请求后使用重定向,这样您就不会被拒绝


您还需要在POST请求之后使用重定向,这样您就不会收到任何请求

我做了一些小改动: 不设置不必要的变量,将用户数据分组到一个数组中等等。这正是我要做的。除此之外,我得说你在路上很好

<?php 
function create_user()
{ 
     $user_data = array ('username' => 'Username', 'firstname' => 'Firstname', 'middlename' => 'Middlename', 'lastname' => 'Lastname', 'password' => 'Password', 'department' => 'Department', 'role' => 'Role');

    foreach ($user_data as $key => $value) {
        $this->form_validation->set_rules($key, $value, 'required|trim');
    }

    if ($this->form_validation->run() == FALSE)
    {

        $data['data'] = array(  'departments'   => $this->user_model->list_departments(), 
                                'it_roles'      => $this->user_model->list_roles(1), 
                                'tc_roles'      => $this->user_model->list_roles(2), 
                                'assessor_roles'=> this->user_model->list_roles(3)
                        );

        $data['content'] = 'admin/create_user';

        parent::error_alert();
        $this->load->view($this->_at, $data);

    } 
    else 
    {
        $salt    = $this->bcrypt->getSalt();

        $user['username']       = $this->input->post('username');
        $user['hashed_password']= $this->bcrypt->hash($this->input->post('password'), $salt);
        $user['fname']          = $this->input->post('firstname');
        $user['mname']          = $this->input->post('middlename');
        $user['lname']          = $this->input->post('lastname');
        $user['department']     = $this->input->post('department');
        $user['role']           = $this->input->post('role');

        $user_login     = array($user['username'], $user['hashed_password'], $salt);
        $user_profile   = array($user['fname'], $user['mname'], $user['lname']);
        $this->user_model->register_user($user_login, $user_profile, $department, $role);

        $data['content'] = 'admin/view_user';

        parent::success_alert(4, 'User Sucessfully Registered!', 'You may now login using your account');

        unset($user['hashed_password']); // Just to be sure 
        $this->load->view($this->_at, $user);
    }

}
我做了一些小改动:
不设置不必要的变量,将用户数据分组到一个数组中等等。这正是我要做的。除此之外,我得说你在路上很好

<?php 
function create_user()
{ 
     $user_data = array ('username' => 'Username', 'firstname' => 'Firstname', 'middlename' => 'Middlename', 'lastname' => 'Lastname', 'password' => 'Password', 'department' => 'Department', 'role' => 'Role');

    foreach ($user_data as $key => $value) {
        $this->form_validation->set_rules($key, $value, 'required|trim');
    }

    if ($this->form_validation->run() == FALSE)
    {

        $data['data'] = array(  'departments'   => $this->user_model->list_departments(), 
                                'it_roles'      => $this->user_model->list_roles(1), 
                                'tc_roles'      => $this->user_model->list_roles(2), 
                                'assessor_roles'=> this->user_model->list_roles(3)
                        );

        $data['content'] = 'admin/create_user';

        parent::error_alert();
        $this->load->view($this->_at, $data);

    } 
    else 
    {
        $salt    = $this->bcrypt->getSalt();

        $user['username']       = $this->input->post('username');
        $user['hashed_password']= $this->bcrypt->hash($this->input->post('password'), $salt);
        $user['fname']          = $this->input->post('firstname');
        $user['mname']          = $this->input->post('middlename');
        $user['lname']          = $this->input->post('lastname');
        $user['department']     = $this->input->post('department');
        $user['role']           = $this->input->post('role');

        $user_login     = array($user['username'], $user['hashed_password'], $salt);
        $user_profile   = array($user['fname'], $user['mname'], $user['lname']);
        $this->user_model->register_user($user_login, $user_profile, $department, $role);

        $data['content'] = 'admin/view_user';

        parent::success_alert(4, 'User Sucessfully Registered!', 'You may now login using your account');

        unset($user['hashed_password']); // Just to be sure 
        $this->load->view($this->_at, $user);
    }

}

这是一种完全正常的做事方式吗?我在想,我可能在一种方法中死记硬背了很多东西。是的。我知道这看起来可能很多,但想象一下,如果表单中只有两个字段。看起来不会那么大吧?现在想象100(是的,有100+个字段的字段)。实际上,您通过自动化表单验证规则“保存”了一些行,否则您可以将它们存储在配置文件()中,这是一种完全正常的做法吗?我在想,我可能在一种方法中死记硬背了很多东西。是的。我知道这看起来可能很多,但想象一下,如果表单中只有两个字段。看起来不会那么大吧?现在想象100(是的,有100+个字段的字段)。实际上,您通过自动化表单验证规则“保存”了一些行,否则您可以将它们存储在配置文件()中。问题的根源在于CodeIgniter并没有真正实现MVC。CI中的视图只是一个哑模板,它强制表示逻辑进入“控制器”。他们所称的模型主要是一个ORM,它将部分域业务逻辑强制放入“控制器”中。最重要的是,他们将授权作为控制者的另一项职责。问题的根源在于CodeIgniter并没有真正实现MVC。CI中的视图只是一个哑模板,它强制表示逻辑进入“控制器”。他们所称的模型主要是一个ORM,它将部分域业务逻辑强制放入“控制器”中。最重要的是,他们将授权作为控制者的另一项职责。一团糟。