我的控制器忽略了我的自定义验证规则

问题描述 投票:0回答:1

我的应用程序需要一个自定义验证规则。作为概念证明,我创建了一个简单的验证规则。出于测试目的,pass方法返回false。我将验证添加到我的控制器,但即使验证器返回false,控制器也会继续进行,就像验证成功一样。我使用调试器来确认pass方法确实被命中并返回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();
 }

谢谢

validation laravel-5.2
1个回答
0
投票

问题解决了。对于任何感兴趣的人,我没有在UniqueAgent类的message方法中添加返回值。我添加了一个返回“some string”,现在控制器重定向客户端以查看并显示错误消息。

在我看来,这是一个糟糕的设计。如果没有返回消息字符串导致类不能按预期执行,那么它不应该只是安静地失败。在我看来,如果控制器只是在验证失败时(即,重定向到视图)完成它所做的事情,有或没有错误消息,那将更好。

© www.soinside.com 2019 - 2024. All rights reserved.