首页 > 解决方案 > 验证或 if 语句

问题描述

我正在实现关注功能,我想确保

  1. 一个用户不应该关注同一个用户两次
  2. 用户不应跟随自己

我应该把上述条件放在下面的方法中吗?

class User extends model
{
     public function follow($user)
     {
           if($this->is($user) || $this->isFollowing($user))
           {
                return;
           }
     }
}

或者我应该验证给定的用户?

class FollowController
{
      public function store()
      {
         request()->validate([
            'username' => ['exists:users,name', new NotYourself, new AlreadyFollowing]
         ]);
      }
}

或者,还有更好的方法 ?

标签: phplaravel

解决方案


B001 在技术上是正确的,但我认为这不是一个意见问题。最佳实践将决定采用第二种选择。模型类更适合与上下文无关的表处理,而不是业务逻辑。如果您以输入验证的形式应用您的规则,那么如果验证失败,您就可以访问其他一些花里胡哨的东西。具体来说,一个错误响应能够通知浏览器突出显示哪个输入字段以告诉用户他们做错了什么。更进一步,我建议将这些规则放在自定义 FormRequest对象中,而不是 Controller 方法中。

无论如何,像这样锁定端点是一种很好的做法,以防止使用 Postman 或类似的东西进行低级黑客攻击。但从那一步退后一步,我建议首先不要提供 UI 选项。查看盖茨和政策。您可以编写分隔访问规则,通常用于授权,并使用它们来指示“关注”按钮是否可用。


推荐阅读