php - 如何在 Laravel 中添加自定义验证规则?
问题描述
我想在我的 Laravel 控制器上添加自定义验证规则:
- 容器存在于数据库中
- 登录的用户是资源的所有者
所以我写了这个:
public function update($id, Request $request) {
$validator = Validator::make($request->all(), [
'name' => 'required|unique:stock.containers|max:255'
]);
$container = Container::find($id);
if(!$container)
{
$validator->errors()->add('id', 'Not a valid resource');
}
if($container->owner_id != user_id())
{
$validator->errors()->add('owner_id', 'Not owner of this resource');
}
if ($validator->fails()) {
return response()->json($validator->errors(), 422); //i'm not getting any
}
}
不幸的是,$validator->errors()
甚至$validator->addMessageBag()
不起作用。我注意到$validator->fails()
清除错误消息并添加错误不会使验证失败。
实现这一目标的正确方法是什么?
解决方案
然后你可以使用after
:
public function update($id, Request $request) {
$validator = Validator::make($request->all(), [
'name' => 'required|unique:stock.containers|max:255'
]);
$validator->after(function($validator) use($id) {
$container = Container::find($id);
if(!$container)
{
$validator->errors()->add('id', 'Not a valid resource');
}
if($container->owner_id != user_id())
{
$validator->errors()->add('owner_id', 'Not owner of this resource');
}
});
if ($validator->fails()) {
return response()->json($validator->errors(), 422); //i'm not getting any
}
}
推荐阅读
- javascript - 是否可以在 Quilljs 编辑器中的 textarea 下方显示工具栏选项?
- sql - SQL将字节转换为INT和BIGINT
- android - Android浏览器中的深层链接未打开应用程序
- visual-studio-code - VS Code 中 APIDoc/JSDoc 的语法高亮
- java - 测试套件在 JUnit5 中是否被认为已弃用?
- r - 为什么在 R 字符串中的条目不会被读入 data.frame?
- cmd - robocopy 将文件复制到当前文件夹中的新文件夹,而不是新创建的文件夹
- python - Big Query 表通过 Python 创建和加载数据
- angularjs - 在 div 结束时获得警报
- javascript - Jquery Datatables 单个列搜索