我正在尝试更加具体地了解MVC并尽可能保持控制器层的薄。
我一直在问自己的一件事是“我应该在哪里打电话给modelname-> save()?”
查看Laravel文档,他们将数据设置为模型并在控制器中调用save似乎不正确...
<?php
namespace App\Http\Controllers;
use App\Flight;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class FlightController extends Controller
{
public function store(Request $request)
{
// Validate the request...
$flight = new Flight;
$flight->name = $request->name;
$flight->save();
}
}
这是一个非常简单的例子,可能就是他们在控制器中完成所有操作的原因。
根据我的理解和我一直在阅读的所有内容,所有业务逻辑都应该位于模型中,控制器负责视图和模型之间的“流量控制”。
那么我会在模型内部调用save吗?或者我应该使用服务层吗?
以下是我目前的示例数据问题。
我正在更新模型的状态。该行已存在于DB中。我使用PATCH / route /来获取控制器方法。从那里我得到了模型。
class TimecardController extends Controller {
...
public function markAsPass(Request $request, $id) {
$test = Test::findOrFail($id);
//I don't think this is the corect way
//$test->status = "passed";
//$test->markedBy = "Teacher123";
//$test->save();
$test->passed();
...
return redirect($redirect_url);
}
}
class Test extends Model {
...
public function passed() {
$this->status = "passed";
//would I call save here?
//$this->save();
}
}
我采取上述方法吗?或者我是否创建一个服务层,我将使用模型实例调用模型函数,然后在模型上调用save?
//in service class
public function makeTestAsPassed($test){
$test->passed();
$test->save();
}
如果需要任何条款,请告诉我。
答案 0 :(得分:0)
MVC旨在简化维护。 你不认为“好”的方法是正确的方法。与业务逻辑相关的所有数据处理都在控制器中。否则,不同的编码器会因为他/她在控制器代码中找不到数据操作逻辑而感到困惑。
你的瘦控制器目标击败了MVC。
另请注意,模型代码的目的是为了精简,因为它是将数据库模式定义为数据库表的镜像的地方。
MVC不是面向对象的abstration。 MVC是一种代码维护一致性的结构。