gpt4 book ai didi

php - 为自定义验证规则命名 - Laravel 8

转载 作者:行者123 更新时间:2023-12-05 01:06:33 24 4
gpt4 key购买 nike

Laravel 8 使创建自定义验证规则成为可能:https://laravel.com/docs/8.x/validation#custom-validation-rules

php artisan make:rule Euro

但是你必须将规则作为对象(而不是字符串)传递:

新欧元

而不是常规的字符串表示法

'必需|欧元'

有没有办法将新的 Rule 类“注册”到一个字符串标识符并像使用现有规则一样使用它们?

最佳答案

您可以通过以下方式进行。

除了默认方法(passes()message())之外,在您的规则中创建两个额外的方法:

  • handle() -- 这将返回您的规则的字符串句柄。它的唯一目的是在一个地方跟踪该句柄。
  • validate() -- 这是验证器将调用的那个。这本质上应该只是对 passes() 的传递,因此您可以将验证逻辑保存在一个地方。此外,您应该将消息传递给验证器。在大多数情况下,您还希望将消息逻辑保存在一个位置。

use Illuminate\Validation\Validator;

public static function handle(): string
{
return 'euro';
}


public function validate(string $attribute, $value, $params, Validator $validator): bool
{
$handle = $this->handle();


$validator->setCustomMessages([
$handle => $this->message(),
]);

return $this->passes($attribute, $value);
}

在服务提供者的 boot() 方法中使用 Validator 外观或工厂注册您的类:


namespace App\Providers;

use App\Rules\Euro;
use Illuminate\Contracts\Validation\Factory as ValidatorFactory;
use Illuminate\Support\ServiceProvider;

class ValidationServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}

/**
* Bootstrap services.
*
* @return void
*/
public function boot(ValidatorFactory $validator)
{
$validator->extend(Euro::handle(), Euro::class);
}
}

就是这样。如果您创建了专用服务提供商,请不要忘记注册您的服务提供商。

关于php - 为自定义验证规则命名 - Laravel 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68922072/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com