php - Laravel 验证规则,每月仅创建一篇文章
问题描述
是否可以在 Laravel 中创建一个允许用户每月只创建一篇文章的验证?
解决方案
我不知道您使用的是哪个版本的 Laravel,并且您省略了很多有关架构等的数据,但让我在这里尝试提供帮助。
您可以检查如何进行自定义验证https://laravel.com/docs/7.x/validation#custom-validation-rules(以下解决方案也适用于 Laravel 5)
Validator::extend('hasnt-posted-in-last-month', function($attribute, $value, $parameters)
{
return \App\Post::where('author_id', auth()->user()->id)
->where('created_at', '>=', now()->subMonth())
->count() === 0;
});
上面的代码有一些前提:1)您在应用程序文件夹中有一个 Post 模型 2)您的迁移中有 withTimestamps() 用于 post 表 3)您的用户在到达这部分代码时始终处于登录状态
然后,您需要在调用请求时调用此验证(或在控制器中使用 Validator::make 进行验证)
注意:为了给您的用户提供更好的用户体验,您应该事先让他们知道他们不允许发帖,这样他们就不会填写所有表单来发送帖子然后收到错误消息。
推荐阅读
- django - 如何从 django 中的视图更改模型字段值
- google-analytics - 请求第三方访问 Google Analytics
- windows - 通过 sshd 在 Windows 中使用 git - 卡在推送中
- vue.js - 如何获取元素的索引并从 Vue Js 中的模板返回它?
- python - 如何在 pymongo 中使用 fsyncLock() 和 fsyncUnlock() 来锁定并发写入操作
- flutter - Stack 中小部件的颜色总是略微透明
- c# - 如何使用 zenject 在 Unity3d 中将 MonoBehaviour 类注入到非 Monobehaviour?
- c# - 如何不打开另一个表单只是按下一个按钮,比如按下按钮 ALARM
- node.js - 如何过滤get api请求
- mysql - 按月分组,即从起始时间戳开始的 30 天,而不是实际月份