php - 在 Laravel 中创建通用控制器时如何保持 DRY?
问题描述
当我在开发我的 Laravel 应用程序时,我注意到我正在创建非常相似的控制器方法。例如,我有模型:任务、块、课程等。在每个控制器中都有非常相似的方法:
public function index()
{
return new GeneralResource(/model/::all());
}
public function show(/model/ $model)
{
return new GeneralResource($model);
}
public function store(/model/Request $request)
{
try {
$model = /model/::create($request->validated());
return response()->json(['status' => 'success']);
} catch (\Exception $e) {
echo $e->getMessage();
}
}
public function update(/model/Request $request, /model/ $model)
{
try {
$model->update($request->validated());
return response()->json(['status' => 'success']);
} catch (\Exception $e) {
echo $e->getMessage();
}
}
public function destroy(/model/ $model)
{
try {
$model->delete();
return response()->json(['status' => 'success']);
} catch (\Exception $e) {
echo $e->getMessage();
}
}
也许我可以使用这些方法扩展 Controller 类并将参数作为受保护的属性传递,但我不确定如何做到这一点。
请帮忙。
解决方案
您正在寻找的是所谓的模板方法。您可以为控制器中的每种方法执行此操作:)
更多信息:
https://refactoring.guru/design-patterns/template-method/php/example https://designpatternsphp.readthedocs.io/en/latest/Behavioral/TemplateMethod/README.html
推荐阅读
- python - 如何有效地替换一系列字符串中的几个固定子字符串
- mongodb - 错误:无法连接到服务器 127.0.0.1:27017,连接尝试失败:NetworkTimeout Socket 操作超时导致连接错误
- sql - sql server 表中的精确字符串匹配
- python - subprocess.Popen 中的 Mendel 开发工具引发套接字错误:[Errno 25]
- sql - 计算连续零的数量及其实例 SQL
- azure-functions - 如何根据ARM模板中的条件部署相同类型不同属性的资源?
- web - 如何上传静态网站?有什么我应该知道的,例如删除 SCSS 文件吗?和其他查询
- r - 将变量标签从 R 导出到 SPSS
- powerbi - 计算每个产品的制造 - DAX MEASURE
- javascript - 如何使此代码与 .each 函数一起使用?