-http
-controllers
--admin
-controlle_1...n
--user
-controlle_1...n
--Front View
-controlle_1...n
可以吗?有什么好的做法。
问题2:假设我有一个议员CityController
因此对于admin
我正在为User
插入记录我正在为Front View
获取这些记录和相同的记录。所以我应该有一个控制器用于所有这些控制器,或者我应该有单独的控制器,如User
,Admin
,Front View
。
我正在开发电子商务应用,所以我有15个控制器。
有什么好的做法?
答案 0 :(得分:1)
一个好的做法是将业务逻辑与控制器分开。所以基本上你有一套独立的类来处理业务逻辑。
<强> ./服务/ 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;
}
}
<强> ./存储库/ ItemRepository.php 强>
namespace Repository;
class ItemRepository
{
public function create($data)
{
$item = new Item;
$item->fill($data);
$item->save();
return $item;
}
}
<强> ./控制器/前端/ 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
}
}
<强> ./控制器/管理/ 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
}
}
正如您所看到的,多个控制器可以重用核心业务逻辑。这将为您提供大量代码重用和可维护性。