繁体   English   中英

Laravel控制器的结构和数量

[英]Laravel Controllers Structure And Numbers of Controller

问题1:我的控制器结构如下:

-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个控制器。

有哪些好的做法?

一个好的做法是将您的业务逻辑与控制器分开。 因此,从本质上讲,您有一组单独的类处理业务逻辑。

./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
    }
}

如您所见,多个控制器可以重用核心业务逻辑。 这将在代码重用和可维护性方面为您提供很大帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM