我应该在哪里保存 Laravel MVC 中的模型?

Seg*_*Dev 5 model-view-controller updating service-layer laravel

我正在尝试更具体地了解 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个非常简单的示例,这可能就是他们在控制器中完成所有操作的原因。

根据我的理解和我一直在阅读的所有内容,所有业务逻辑都应该位于模型内部,控制器负责视图和模型之间的“流量控制”。

那么我会在模型本身内部调用 save 吗?还是应该使用服务层?


这是我当前的示例数据问题。

我正在更新模型的状态。该行已存在于数据库中。我使用 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我是否采用上述方法?或者我是否创建一个服务层,我将在其中使用模型实例调用模型函数,然后在模型上调用保存?

//in service class
public function makeTestAsPassed($test){
    $test->passed();
    $test->save();

}
Run Code Online (Sandbox Code Playgroud)

如果需要任何澄清,请告诉我。

小智 0

MVC 的设计是为了易于维护。您认为不“好”的方法才是正确的方法。所有与业务逻辑相关的数据处理都在控制器中进行。否则,不同的编码员将会感到困惑,因为他/她在控制器代码中找不到数据操作逻辑。

您的瘦控制器目标击败了 MVC。

另请注意,模型代码的目的是精简,因为它是将数据库模式定义为数据库表的镜像的地方。

MVC 不是面向对象的抽象。MVC是一种代码维护统一的结构。