我使用Laravel为一个项目提供学生进度报告,供教育机构完成。
至于为学生加载正确的报告表格,每个学生都在课程上,由" course_id"关于"课程"映射到值的表:phd,master,bachelor等我根据他们所属的课程加载学生的相应视图。学生由请求URL中的参数确定。
我遇到的问题是提交表单,因为我试图在代码中抽象流程,但不确定从哪里开始。在以前的版本中,我为每个课程设置了一个控制器:PhdController,MasterController等,每个都有自己的处理表单数据的方法,即验证,上传文件,将所有数据添加到DB,在提交后向用户发送响应。我觉得这种做法是错误的并且违反了DRY原则,所以想要解决这个问题。
我想知道是否可以使用单个ReportController(而不是每个课程一个),它会采用某种报告接口/对象来调用它自己的提交方法提交表单时。每门课程都需要实现此接口/对象。例如,让我们说我们已经加载了一个博士学生表单并且有人提交了表单,这将转到ReportController的提交方法,然后返回此接口/对象的PhD实现并调用它#39; s提交方法,它将通过FormRequest对象进行验证,然后如果通过它将上传任何文件,然后将数据提交到数据库。我特别挣扎的是如何在运行时确定对象的类型。
对此的任何指导都将受到高度赞赏!谢谢。
编辑:通过我的阅读,我猜测工厂模式是我正在寻找的?
使用此link,我猜测我的代码可能如下所示?
Interface ReportInterface {
public function submit()
}
class PhdReport implements ReportInterface {
public function submit()
{
// validate request
// upload request files
// submit request data to database
// return response
}
}
class MasterReport implements ReportInterface {
public function submit()
{
// validate request
// upload request files
// submit request data to database
// return response
}
}
class ReportFactory {
public static function create($name)
{
if (class_exists($name) && $name instanceof ReportInterface) {
return new $name();
}
}
}