2016-04-27 122 views
0

問題1的數字:我有控制器結構,如:Laravel控制器結構和控制器

-http 
-controllers 
    --admin 
    -controlle_1...n 
    --user 
    -controlle_1...n 
    --Front View 
    -controlle_1...n 

是它好嗎?什麼是好的做法。

問題2:讓我們假設我有一個countroller CityController所以對於admin我正在插入記錄User我正在獲取這些記錄,並同爲Front View。所以我應該有一個控制器的所有這些或我應該有像UserAdminFront View單獨的控制器。

我正在從事電子商務應用程序,所以我有15個控制器。

有什麼好的做法?

回答

1

一個好的做法是將您的業務邏輯與控制器分開。所以基本上你有一組獨立的類處理業務邏輯。

./Service/ItemService.php

namespace Service; 

class ItemService 
{ 
    public function create($name, $description, $active = true) 
    { 
     $itemRepository = new ItemRepository(); 

     $item = $itemRepository->create([ 
      'name' => $name, 
      'description' => $description, 
      'active' => $active, 
     ]); 

     // Create audit log 
     $log = new AuditLogService; 
     $log->create("New product was created", $item); 

     // Update stock 

     // Send notification email, etc. 

     return $item; 
    } 
} 

./Repository/ItemRepository.php

namespace Repository; 

class ItemRepository 
{ 
    public function create($data) 
    { 
     $item = new Item; 
     $item->fill($data); 
     $item->save(); 

     return $item; 
    } 
} 

./Controller/FrontEnd/ItemController.php

namespace Controller\FrontEnd; 

class ItemController 
{ 
    public function store() 
    { 
     // Validate data 

     // Call service to create item 
     $itemService = new ItemService; 
     $item = $itemService->create($request->inputs); 

     // return view response 
    } 
} 

./Controller/Admin/ItemController.php

namespace Controller\Admin; 

class ItemController 
{ 
    public function store() 
    { 
     // Validate data 

     // Call service to create item 
     $itemService = new ItemService; 

     $item = $itemService->create($request->inputs); 

     // return JSON response 
    } 
} 

正如你可以看到多個控制器可以重用的核心業務邏輯。這將有助於您在代碼重用和可維護性方面做出巨大貢獻。

+0

很好的回答!謝謝 – Gammer

+0

@Gamer隨時!此外,我正在爲類似應用程序的基礎庫繼續工作,但您將能夠獲得更廣泛的想法。 https://github.com/devrtips/php-soa-library。 – blackpla9ue

+0

太好了...會保持聯繫。我可以聯繫的任何方式? – Gammer