我已经使用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个输入字段时。
答案 0 :(得分:12)
通过使用第一个示例,您允许其他开发人员更改视图和修改控制器,但仍然按原样维护模型。这必须是良好重构的一个例子。
通过选择第二个样本,您可以在视图中锁定开发,因为输入名称被模型锁定,您最好尽可能少地更改模型。
换句话说......
第一个样本:灵活的
第二个样本:'d * mnit,不是再次!'
答案 1 :(得分:4)
我知道这是有争议的,但这可能是CodeIgniter MVC 真正的简单解释。
模型 - 访问数据库(CRUD)
控制器 - 实现逻辑,调用库和帮助程序,并传递给视图
观看次数 - 用户看到的内容
库 - 使用模型的函数
助手 - 不需要使用模型的功能
你不想在模型OR控制器中添加 login(),我会创建一个库来处理登录()函数直接调用模型。
然后控制器使用该库,传入 $ this-> input-> post 变量,然后相应地渲染视图。
可在此处找到更多信息:CodeIgniter MVC和CodeIgniter 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)
我总是使用第一个。我也在我的控制器中完成所有工作,并保留模型以进行数据库交互。我不认为有确定的答案。使用正确的工作。