Codeigniter访问$ this-> input-> post()的最佳做法

时间:2010-11-04 12:29:53

标签: codeigniter coding-style

我已经使用CodeIgniter进行了一段时间的编码,当我编程或读取其他程序员的代码时,我通常会遇到两种从输入中获取数据的方法。一个是从控制器获取输入,然后作为参数传递给模型,如下所示:

class MyController extends Controller
{
    .
    .
    .
    public function login()
    {
       $username = $this->input->post('username');
       $password = $this->input->post('password');
       $this->load->model('User');
       $this->User->login($username, $password);
    }
}

class User extends Model
{
    .
    .
    .
    public function login($username, password)
    {
      ....
    }
}

另一个是直接从Model访问输入参数,如下所示:

class MyController extends Controller
{
    .
    .
    .
    public function login()
    {
       $this->load->model('User');
       $this->User->login();
    }
}

class User extends Model
{
    .
    .
    .
    public function login()
    {
       $username = $this->input->post('username');
       $password = $this->input->post('password');
    }
}

您认为更好的做法是什么?我倾向于第一个,因为它给了模型更多的独立性,但我在sample codes和其他开发人员中看到了第二个方法。不可否认,第二种方法更短,特别是当您接受5-10个输入字段时。

5 个答案:

答案 0 :(得分:12)

通过使用第一个示例,您允许其他开发人员更改视图和修改控制器,但仍然按原样维护模型。这必须是良好重构的一个例子。

通过选择第二个样本,您可以在视图中锁定开发,因为输入名称被模型锁定,您最好尽可能少地更改模型。

换句话说......
第一个样本:灵活的 第二个样本:'d * mnit,不是再次!'

答案 1 :(得分:4)

我知道这是有争议的,但这可能是CodeIgniter MVC 真正的简单解释。

模型 - 访问数据库(CRUD)

控制器 - 实现逻辑,调用库和帮助程序,并传递给视图

观看次数 - 用户看到的内容

- 使用模型的函数

助手 - 不需要使用模型的功能

想在模型OR控制器中添加 login(),我会创建一个来处理登录()函数直接调用模型

然后控制器使用该库,传入 $ this-> input-> post 变量,然后相应地渲染视图。

可在此处找到更多信息:CodeIgniter MVCCodeIgniter library

答案 2 :(得分:4)

有点晚了,但要在模型中保持一个干净的模型(尽可能)设置变量,并根据需要将参数传递给它。例如

class MyController extends Controller
{
    public function login()
    {
       $this->load->model('User');

       //Set your model's variables, before executing the model function
       $this->User->username = $this->input->post('username');
       $this->User->pass = $this->input->post('pass');

       $this->User->login();

    }
}


class User extends Model
{

    var $username;
    var $pass;

    public function login()
    {
        $this->db->where('username', $this->username);
        $this->db->where('pass', $this->pass);
        etc...
    }

} 

答案 3 :(得分:1)

我更喜欢第一个,并在控制器中保留数据的验证和标准化过程。

答案 4 :(得分:0)

我总是使用第一个。我也在我的控制器中完成所有工作,并保留模型以进行数据库交互。我不认为有确定的答案。使用正确的工作。