使用模型和服务的laravel服务

问题描述 投票:1回答:1

我正在尝试正确地删除我的代码,我希望你的意见。我可以在其他服务中拨打电话吗?

我在互联网上找到了简单的例子

这是我的架构:

UserController
    UserService
        User
            Fields => id, name

AliasController
    AliasService
        Alias
            Fields => id, user_id, name

1个用户有多个别名如果未定义别名,则会生成该别名

形成

<input type="text" name="name">
<input type="text" name="alias">

UserController的

public function store(StoreUserRequest $request)
{
    $request->validated();

    $this->userService->create(request()->except(['_token']));

    return back()->with('success', 'created');
}

UserService

class UserService
{
    protected $user;
    protected $alias;

    public function __construct(User $user, AliasService $aliasService)
    {
        $this->user = $user;
        $this->alias = $alias;
    }

    public function create(array $attributes)
    {
        // create user
        $user = $this->user->create($attributes);

        // create or generate alias
        if (isset($attributes['alias'])) {
            $aliasName = $attributes['alias'];
        } else {
            $aliasName = $this->aliasService->generate($user->name);
        }

        $this->aliasService->create([
            'user_id' => $user->id,
            'alias' => $aliasName
        ]);

        return $user;
    }
}

编辑18/02/2019:

我有一个问题:如果我必须在我的控制器中使用单个服务,我如何在create方法中获取角色列表?

class UserController extends Controller {protected $ userService;

    public function __construct(UserService $userService)
    {
        $this->userService = $userService;
    }

    public function create()
    {
        $user = new User();

        $roles = Role::all(); <= ???
        or
        $roles = $this->roleService->getAll(); <= ???

        return view('users.create', array(
            'user' => $user,
            'roles' => $roles
        ));
    }
}
laravel service model using
1个回答
0
投票

我觉得当你想要分离一个涉及模型创建 - 更新功能的逻辑时,你可以使用Repository概念。基本上只是一个处理特定模型上发生的动作的类。

服务更像是专用于特定域概念的类。服务的目的是提供帮助函数来处理服务所代表的域概念。

为了简化,例如:

您可能拥有用户模型。每个用户都可以获取他的facebookfeeds。他也可以参加小组讨论。在这种情况下,您可以拥有2项服务:

FacebookService负责与facebook发布相关的所有操作。 DiscussionService负责与小组讨论有关的所有行动。

现在,您可能希望在讨论中添加功能以在Facebook上发布最近的讨论。这意味着DiscussionService可以在内部访问FacebookService以利用它的某些辅助函数。

即使在此示例中,两个服务一起使用,仍然每个服务仅根据其分配的域概念执行它所知道的内容。如果出现超出服务范围的内容,我们会调用相应的服务功能。希望有帮助......

© www.soinside.com 2019 - 2024. All rights reserved.