一個好的做法是將您的業務邏輯與控制器分開。所以基本上你有一組獨立的類處理業務邏輯。
./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
}
}
正如你可以看到多個控制器可以重用的核心業務邏輯。這將有助於您在代碼重用和可維護性方面做出巨大貢獻。
很好的回答!謝謝 – Gammer
@Gamer隨時!此外,我正在爲類似應用程序的基礎庫繼續工作,但您將能夠獲得更廣泛的想法。 https://github.com/devrtips/php-soa-library。 – blackpla9ue
太好了...會保持聯繫。我可以聯繫的任何方式? – Gammer