php - 验证或 if 语句
问题描述
我正在实现关注功能,我想确保
- 一个用户不应该关注同一个用户两次
- 用户不应跟随自己
我应该把上述条件放在下面的方法中吗?
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]
]);
}
}
或者,还有更好的方法 ?
解决方案
B001 在技术上是正确的,但我认为这不是一个意见问题。最佳实践将决定采用第二种选择。模型类更适合与上下文无关的表处理,而不是业务逻辑。如果您以输入验证的形式应用您的规则,那么如果验证失败,您就可以访问其他一些花里胡哨的东西。具体来说,一个错误响应能够通知浏览器突出显示哪个输入字段以告诉用户他们做错了什么。更进一步,我建议将这些规则放在自定义 FormRequest对象中,而不是 Controller 方法中。
无论如何,像这样锁定端点是一种很好的做法,以防止使用 Postman 或类似的东西进行低级黑客攻击。但从那一步退后一步,我建议首先不要提供 UI 选项。查看盖茨和政策。您可以编写分隔访问规则,通常用于授权,并使用它们来指示“关注”按钮是否可用。
推荐阅读
- visual-studio - Visual Studio 2019 - 无法更改配置文件设置,而是打开 FolderProfile.pubxml
- php - 通过 ACF 复选框值过滤 WooCommerce 产品的 URL 查询?
- c# - Automapper 升级问题...类型中不存在
- react-native - React Native - 调试和发布中的默认字体颜色不同
- openssl - 如何更改 openSSL 证书的本地密码?
- javascript - 无法选择网页测试的下拉选项
- javascript - 如何更改char js的innerHTML
- javascript - JS 排序表 - 排序指标
- angular - 使用 https://localhost 测试 Cypress Crud 应用程序
- python - 如何为 Python Rust+ API Wrapper 建立 Websocket 连接