2017-06-01 40 views
0

Laravel 5.4 *Laravel - 一些相關車型節省

我有以下控制器和功能:

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,但它們似乎只在記錄已經創建時才起作用。

我想起來的第一件事就是鏈接不同的控制器方法,但這對我來說似乎真的不乾淨。

謝謝。

回答

0

這聽起來像你想創建一個處理這些的服務。總的來說,你會覺得鏈接不同的控制器方法絕對不是解決這個問題的方法。您基本上需要檢查請求數據並將其妥善保存的服務。

在你的控制器:

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

這項服務的處理分析和驗證數據的邏輯。

+0

這很酷又幹燥,但我怎樣才能保存一個類別,一個作者和一本書,來自客戶端的一個請求?想象一下,我用'{category:category,author:author,book:book .....}來做一個$ post' – Enrico

+0

@Enrico我已經編輯過我的帖子,我將如何處理它。 –

+0

我不知道這真的會幫助我,但感謝您的幫助。我想我會與異步ajax調用去不同的控制器,並相應地更新客戶端數據。 – Enrico