Laravel 代码重构:使用 Services, Events, Jobs, Actions 来重构控制器方法

疑难杂症   2023-04-02 09:03   451   0  


我听到关于 Laravel 最热门的问题之一是「如果构建项目」。如果我们缩小范围,它的大部分听起来像「如果逻辑不应该在控制器中,那么我们应该把它放在那里?」

问题是这些问题没有单一的正确答案。Laravel 给予了你自主选择结构的灵活性,这既是好事,也是坏事。你不会在官方的 Laravel 文档中找到任何建议,所以让我们基于一个具体的例子来尝试讨论各种选择。

注意:由于没有一种方法来构建项目结构,本文将充满附注、「假设」和类似的段落。我们建议您不要跳过他们,请通读这篇文章,以了解最佳实践的所有例外情况。

想象一下,你有一个注册用户的控制器方法,它做了很多事情:

public function store(Request $request)
{
    // 1. 验证
    $request->validate([
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => ['required', 'confirmed', Rules\Password::defaults()],
    ]);

    // 2. 创建用户
    $user = User::create([
        'name' => $request->name,
        'email' => $request->email,
        'password' => Hash::make($request->password),
    ]);

    // 3. 上传头像图片并更新用户
    if ($request->hasFile('avatar')) {
        $avatar = $request->file('avatar')->store('avatars');
        $user->update(['avatar' 
                    
                
博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。
闲言碎语
我以为明天会更好,后来我天天盼着明天。
赞赏支持

如果觉得博客文章对您有帮助,异或土豪有钱任性,可以通过以下扫码向我捐助。也可以动动手指,帮我分享和传播。您的肯定,是我不懈努力的动力!感谢各位亲~