【问题标题】:How to send Multiple parameters in passes function of custom validation rule如何在自定义验证规则的传递函数中发送多个参数
【发布时间】:2018-08-22 16:21:27
【问题描述】:

我正在实现一个自定义验证规则,它应该在自定义验证规则的传递函数中采用另一个具有属性和值的参数。由于我们在编写自定义验证时实现了 Rule 接口,它不允许我们在 pass 函数中添加第三个参数,但我需要第三个参数。此外,如果有人能指导我将数据库包含在规则中的最佳实践,我会很高兴。如果我们需要自定义验证规则中的表格,我们应该只在规则中包含所需的模型,或者我们应该在验证规则中编写查询时使用 Illuminate\Support\Facades\DB。我想要以下格式的 pass 函数

public function passes($attribute, $value,$extraparam)
{
    /*Code here*/
}

【问题讨论】:

  • 创建一个数组并传递给函数。
  • 这就像一些黑客,但我不想使用它。我想要一些适当的方法来实施该规则。

标签: laravel laravel-5.3


【解决方案1】:

您可以将额外的参数作为参数传递给规则的构造函数

use App\Rules\Uppercase;

$request->validate([
    'name' => ['required', new Uppercase($param)],
]);

所以你可以修改你的规则类

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class Uppercase implements Rule
{
    protected $extraParam;

    public function __construct($param)
    {
        $this->extraParam = $param;
    }

    public function passes($attribute, $value)
    {
        // Access the extra param as $this->extraParam
        return strtoupper($value) === $value;
    }
}

【讨论】:

  • 非常感谢它的工作。如果您能在数据库连接方面帮助我,我将不胜感激。
  • 您能否更具体地了解数据库?我不太明白你的问题是什么意思。
  • 我想在此验证期间比较数据库表中的某些内容。我的问题是我们应该在这个自定义规则中加载一个完整的模型,还是应该通过其他方式来完成这项工作。我想知道最好的方法。
  • 两种方法都可以,我会选择模型方法,因为这样更容易编写和维护
  • 加载整个模型对于单个小函数来说就可以了吗?
猜你喜欢
  • 2015-09-11
  • 1970-01-01
  • 2018-07-29
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
相关资源
最近更新 更多