我对laravel很陌生。使用Laravel 8。在保存数据时,我在许多例子中看到过下面的方法。
在控制器
$emp = new Employee();
$emp->emp_name = $request->emp_name;
$emp->emp_no = $request->emp_no;
$emp->email = $request->email;
$emp->save();
我的疑问是根据MVC原则控制器是用来连接模型和视图。这是一种正确的做法还是必须在模型中做这部分?
我正在寻找一些指导来学习最佳实践。
您也可以尝试以下方法:
class Employee extends Model
{
protected $fillable = ['emp_name', 'emp_no', 'email'];
}
$emp = Employee::create($request->all()); // generally i avoid this way
$emp = Employee::create($request->only(['emp_name', 'emp_no', 'email']));
在MVC体系结构中,模型层负责管理数据,其中包括验证、存储和检索数据等任务。控制器层处理用户的输入并控制应用程序的流程,而视图层负责向用户呈现UI。
在您提供的代码中,控制器创建Employee模型的新实例,设置其属性,然后调用save方法将数据持久化到数据库中。这在Laravel中很常见,而且完全可以接受。
然而,为了严格遵守MVC原则,用于持久化数据的逻辑应该理想地放在模型层。您可以在Employee模型中创建一个方法,该方法接受数据数组并处理保存过程。这样,控制器只需要将数据传递给模型,而模型负责其余的工作。
在控制器
$emp = new Employee();
$emp->saveEmployee($request->all());
模型
class Employee extends Model
{
protected $fillable = ['emp_name', 'emp_no', 'email'];
public function saveEmployee($data)
{
$this->fill($data);
$this->save();
}
}
在这段重构的代码中,控制器只是将请求数据传递给模型中的saveEmployee方法,模型负责将数据保存到数据库中。
这种方法使模型负责管理数据,而控制器只是充当模型和视图之间的中介。这是一个很好的实践,因为它使你的代码更有组织,更容易维护,并坚持MVC原则。