【问题标题】:Use a default laravel validation rule inside custom rule file在自定义规则文件中使用默认的 laravel 验证规则
【发布时间】:2020-06-29 16:34:46
【问题描述】:

我想验证我的输入是 UUID 还是“LAST_QUESTION”。我创建了一个自定义验证规则LastOrUUID,我想在其中使用 UUID 验证规则。我找不到任何方法来做到这一点,也许你知道实现这个的正确方法是什么?我的上下文自定义规则:

class LastOrUUID implements Rule
{
    /**
     * Determine if the validation rule passes.
     *
     * @param string $attribute
     * @param mixed $value
     * @return bool
     */
    public function passes($attribute, $value)
    {

        if ($value === 'LAST_QUESTION' /* || this is uuid */) {

            return true;

        }

        return false;

    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        // TODO - add translation
        return 'This should either be the last question or have a reference to next question!';
    }
}

【问题讨论】:

  • 我想你的意思是在你的自定义类中继承默认验证!!!
  • @Nazari 是的,那将是理想的。但是我很高兴至少使用Str::isUuid(),如果它被 Laravel 使用并且没有更好的方法。

标签: php laravel laravel-5


【解决方案1】:

如果您只想验证给定值是否是 UUID,您可以使用 Laravel 的原生 Str::isUuid 方法(在后台使用 RegEx)、Ramsey's UUID packageisValid 方法或普通 RegEx(根据 @ 987654324@):

// Laravel native
use Illuminate\Support\Str;

return $value === 'LAST_QUESTION' || Str::isUuid($value);

// Ramsey's package
use Ramsey\Uuid\Uuid;

return $value === 'LAST_QUESTION' || Uuid::isValid($value);

// RegEx
return $value === 'LAST_QUESTION' || preg_match('/[a-f0-9]{8}\-[a-f0-9]{4}\-4[a-f0-9]{3}\-(8|9|a|b)[a-f0-9]{3‌​}\-[a-f0-9]{12}/', $value);

【讨论】:

  • 是的,我知道,感谢您的回答!但我的想法是——如果有一个 laravel 规则,它一定已经以某种方式实现并且应该是可重用的,不是吗?在我验证 UUID 的任何地方都使用相同的 UUID 验证实现是一个好习惯,我错了吗?
  • 好主意!确实有可用的 UUID 验证规则。它使用Str::isUuid internally,它同样基于on a RegEx。我会把它添加到我的帖子中,因为我不知道 Laravel 提供了这种方法。
  • 谢谢!我更喜欢这个解决方案。很有帮助。
猜你喜欢
  • 2017-12-01
  • 2017-04-11
  • 2018-02-18
  • 2014-04-22
  • 2019-02-12
  • 2016-11-22
  • 2018-06-03
  • 2015-01-26
  • 2016-01-13
相关资源
最近更新 更多