Laravel - 保存

时间:2017-06-01 15:48:39

标签: php laravel model controller eloquent

Laravel 5.4。*

我有以下控制器和功能:

AuthorController

class AuthorController extends Controller {
    public function store(StoreAuthor $request) {
        Author::create($request->all());
        return response()->json(["message" => "done"]);
    }
}

BookController的

class BookController extends Controller {
    public function store(StoreBook $request) {
        Book::create($request->all());
        return response()->json(["message" => "done"]);
    }
}

CategoryController

class CategoryController extends Controller {
    public function store(StoreCategory $request) {
        Category::create($request->all());
        return response()->json(["message" => "done"]);
    }
}

更像是这些。

我通过FormRequest处理验证和安全性,这是干净而优雅的。

之前曾经问过我想要实现的目标,但我还没有找到适合我的解决方案。

我想发送一个表单并保存许多相关的模型。 我想我会发送一个json对象,其中包含所有模型的数据:{author:author, book:book, category:category, ....}

我应该创建一个处理多个模型逻辑的不同控制器吗?如果是这样,我如何避免重复原始控制器中的逻辑?

我应该为每个可以为其他控制器保存的控制器创建特征(即:AuthorTrait)吗?如果是这样,我如何保持formRequest验证和策略逻辑?

我已经看过laravel方法associateattach,但它们似乎只有在已创建记录时才有效。

我想到的第一件事是链接不同的控制器方法,但这对我来说似乎真的不干净。

谢谢。

1 个答案:

答案 0 :(得分:0)

听起来我想要创建一个处理这些的服务。我会说你一般认为链接不同的控制器方法肯定不是解决这个问题的方法。您基本上需要一种检查请求数据并相应保存的服务。

在您的控制器中:

class AuthorController extends Controller {
    public function store(StoreAuthor $request, CustomService $service) {
        return $service->execute($request);
    }
}

该服务将处理解析和验证数据的逻辑。