CodeIgniter如何将视图中的变量传递给控制器​​

时间:2015-09-17 08:52:42

标签: php html codeigniter

我目前正在使用Codeigniter。我正在尝试创建一个注册页面。 注册位于视图文件中。在填写注册表后,我想将用户的信息发送给控制器。之后我想检查信息是否有效(用户名尚未使用..有效的电子邮件地址等)。如果是,则将相同的信息发送到添加到数据库的Model。如果它是假的,那么加载视图注册页面。我发现很多主题都在谈论如何从控制器发送变量到视图(将动态数据添加到CodeIgniter网站上的View)或控制器模型,但没有找到任何有关view->控制器的信息。这就是我想要做的事情:

    VIEW                         CONTROLER
    _______________              ______________________
    |REGISTRATION:| -----------> |Check valid argument|
    ---------------              ----------------------
             /|\                  |        |
              |___________________| If it's valid information
   (if no valid)                           |
                                           |
                                          \ /
                                         MODEL
                                  ____________________________
                                  |Add information to database|
                                  -----------------------------

这是我的表格:

<h1>create a new account</h1>
<?php echo validation_errors();?>
<?php echo form_open('index.php/add_db');?>
    <label for='name'>Name</label>
    <input type='text' size='20' id='name' name='name'/>
    <br />
    <label for='last_name'>Last_Name</label>
    <input type='text' size='20' id='last_name' name='last_name'/>
    <br />
    <label for='username'>Username</label>
    <input type='text' size='20' id='username' name='username'/>
    <br />
    <label for='password'>Password</label>
    <input type='password' size='20' id='username' name='password'/>
    <br />
    <label for='confirmation_password'>Password confirmation</label>
    <input type='password' size='20' id='password' name='password'/>
    <br />
    <input type="submit"/>
</form>

这是我的控制器文件

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Add_db extends CI_Controller 
{
    function __construct()
    {
        parent:: __construct();
        $this->load->database();
    }

    function index()
    {
        //check if the password does match
        //check before if the username is not already user
        //open the model function which add to the database :)
    }
}

我不知道在模型中检查用户信息是否更好。因为我知道模型处理数据库和查询。 否则控制器处理计算部分,因此控制器可能更适合此任务。 但没关系。是否可以发送视图----&gt;控制器等信息? 或者我有没有找到另一种检查信息的方式? 像控制器一样 - &gt;查看 - &gt;模特?

谢谢

2 个答案:

答案 0 :(得分:1)

尝试此选项,

首先从视图发送数据到控制器和控制器检查数据是否有效(服务器端验证)如果有效则发送到模块说功能名称check_user_data如果该功能检查密码是否匹配,用户名是如果您发现确定,则不是用户,然后调用新函数说save_user_data并插入用户数据,如果不正常则从该函数返回false返回控制器。

您的流程:

在您的选项中将用户数据发送到控制器,然后调用模块功能以检查用户信息是否正确,如果是,则将数据发送到模块以便插入。

在这里,您要对模块进行两次调用。

通过这种方式你可以减少不。控制器和模块之间的呼叫。

答案 1 :(得分:1)

你可以这样做

DAO

在你的模型中,应该有插入功能

function __construct()
    {
        parent:: __construct();
        $this->load->database();
        $this->load->helper(array('form', 'url'));
        $this->load->library('form_validation');
    }

  function index(){

        //first set the validation rules
        $this->form_validation->set_rules('name', 'Name', 'required');
        $this->form_validation->set_rules('last_name', 'Last Name', 'required');
        $this->form_validation->set_rules('username', 'User Name', 'required');
        //re_password is the input field name of confirm password
        $this->form_validation->set_rules('password', 'Confirm password', 'trim|required|matches[re_password]');

            if ($this->form_validation->run() == FALSE) {
                //return to data form again
                $this->load->view('myform');
            }
            else{
                //if validation is ok, then save data in db
                //this is the way that catch, data coming from view in the controller
                $name      = $this->input->post('name');
                $last_name = $this->input->post('last_name');
                $username  = $this->input->post('username');
                $password  = $this->input->post('password');

                // then you can send these date to database
                //to send to db using array, array keys should match with the db table column names
              $data_to_db['name']      = $name;
              $data_to_db['last_name'] = $last_name;
              $data_to_db['username']  = $username;
              $data_to_db['password']  = $password;

              //this model should be loaded in this controller
              //send data from controller to model
               $this->model_name->insert($data_to_db);  

         }
}