【问题标题】:Laravel custom rule's custom validation error messageLaravel 自定义规则的自定义验证错误信息
【发布时间】:2021-12-09 04:35:54
【问题描述】:

我有一个使用规则对象创建的自定义规则,它工作正常,除了一件事,它不会拾取我在组件中为它创建的自定义验证消息,而是选择分配给它的任何内容在validation.php 文件中或从翻译后的validation.php 文件中对其进行等效翻译。其他非自定义规则对同一字段的自定义消息按预期工作。

组件:

public function rules()
    {
        return[
            'topic' => ['required', 'string', 'max:250', 'min:5', new Profane],
            'name' => ['required', 'string', 'max:250'],
            'email' => ['required', 'email:rfc,dns', 'max:250']
        ];
    }

protected $messages = [
        'topic.required' => 'some message',
        'topic.max' => 'some message',
        'topic.min' => 'some message',
-->     'topic.profane' => 'some message',
        'name.required' => 'some message',
        'name.max' => 'some message.',
        'email.email' => 'some message',
        'email.required' => 'some message',
    ];

规则对象:

public function passes($attribute, $value)
    {
        $profane = ProfaneWord::all();
        $words = $profane->pluck('word');
        foreach ($words as $word)
        {
            if (stripos($value, $word) !== false) return false;
        }
        return true;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return trans('validation.profane');
    }

【问题讨论】:

  • 我不确定这是否可行,但如果可以,我希望它更像'topic.'.Profane::class => 'some message',
  • @apokryfos 所以不能在运行时为自定义规则使用自定义消息?如果这是不可能的,那就太奇怪了。

标签: laravel laravel-livewire


【解决方案1】:

目前在使用自定义规则时这似乎是不可能的。问题in the source 消息只能从message() 方法中检索到。但是,由于验证规则是您自己的类,您可以随时更改它:

    private $message; 
    public __construct($message = null) {
       $this->message = $message;
    }

    public function passes($attribute, $value)
    {
        $profane = ProfaneWord::all();
        $words = $profane->pluck('word');
        foreach ($words as $word)
        {
            if (stripos($value, $word) !== false) return false;
        }
        return true;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return $this->message??trans('validation.profane');
    }

【讨论】:

    猜你喜欢
    • 2016-10-21
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 2012-03-24
    • 2014-03-25
    • 2017-04-11
    相关资源
    最近更新 更多