laravel - 规则对象不触发 pass() 方法
问题描述
我正在尝试使用规则实现验证以验证模型中的字段;如官方文档中所示,以这种方式:
1) 在文件夹 App/Rules 我把文件 Um.php:
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
use App\Models\Common\Item;
class Um implements Rule
{
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
if(strlen($attribute) < 5)
return false;
return true;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'The field is too short ';
}
}
2)在我的控制器类中,在方法更新中:
use App\Rules\Um as RuleUm;
...
public function update(Request $request $item)
{
//$item is the model don't worry for this
//Here is where I invoke the rule
$request->validate([
'codum' => [ new RuleUm],
]);
$item->update($request->input());
//...son on
}
到目前为止一切顺利,更新数据后出现问题;pass() 方法被完全忽略;并恰好执行更新。这不依赖于方法的逻辑,因为无论如何它仍然返回 false,就像 Laravel 仍然忽略该方法一样,它没有被执行。
有人能帮我吗?我究竟做错了什么?
解决方案
如果您正在处理自定义 Rule 类,它不会验证字段(在您的情况下为 codum)是否为空或请求中不存在。如果您希望自定义验证对象在值为空的情况下运行,则需要使用ImplicitRule
合同。
相同的请参见这篇文章
简而言之,您需要这样做:
class Um implements ImplicitRule
推荐阅读
- javascript - 如何将 blob(AJAX 响应)保存到我的服务器而不是用户计算机中的命名文件(JSON 类型)中
- python - 如何更改 seaborn 线图中的 xaxis 标签
- context-free-grammar - 语言到上下文无关语法
- php - 如何提高 PHP 中 for 循环的速度?
- django - json.loads() 上的 Django Rest Framework 和 Angular Dev vs Prod 字符串和字节问题
- javascript - 在mongodb(monk)中用.find()获取最新的50个文档
- c# - C# WPF SQL Server 文件下载到 PC
- python - 为什么我不能对我用python写的这个基本的链表方法做一个基本的测试?
- database - 这样的数据库是否规范化了?
- tfs - Tfs 自动发布,在哪个步骤标记化评估