我需要针对我的应用程序的自定义验证规则。作为概念证明,我创建了一个简单的验证规则。为了进行测试,passs方法返回false。我已将验证添加到控制器中,但是即使验证器返回false,控制器也会像验证成功一样继续进行。我使用调试器来确认passs方法确实被击中并返回false。
我为什么做错了?
这是我的规则班:
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class UniqueAgent implements Rule
{
protected $id;
/**
* @return mixed
*/
public function getId()
{
return $this->id;
}
/**
* @param mixed $id
*/
public function setId($id): void
{
$this->id = $id;
}
/**
* UniqueAgent constructor.
*/
public function __construct($id)
{
$this->setId($id);
}
public function passes($attribute, $value)
{
// TODO: Implement passes() method.
return false;
}
public function message()
{
// TODO: Implement message() method.
}
}
这是控制器代码:
public function update(Request $request, $id)
{
// UniqueAgent rule returns 'false'
$validateData = $request->validate([
'agency' => [
'required',
new UniqueAgent($id)
]
]);
$agent = Agent::findOrFail($id)
$agent->agency = $request->input('agency');
$agent->save();
}
谢谢
答案 0 :(得分:0)
问题解决了。对于任何感兴趣的人,我都没有向UniqueAgent类的message方法添加返回值。我添加了返回“某些字符串”,现在控制器将客户端重定向到查看并显示错误消息。
我认为这是一个糟糕的设计。如果不返回消息字符串,导致该类无法按预期执行,则它不应只是安静地失败。我认为,最好是在验证失败(即重定向到视图)时,无论有无错误消息,控制器都简单地执行操作。