有什么方法可以验证用户在 Laravel 中创建的 cron 表达式吗?
不是开箱即用,但有一个用 PHP 编写的精彩的 cron 表达式解析器。
composer require dragonmantank/cron-expression
安装
然后您需要使用
php artisan make:rule Cron
创建自定义规则
现在只需在
isValidExpression()
方法中调用 passes()
即可。
public function passes($attribute, $value)
{
return CronExpression::isValidExpression($value);
}
不要忘记留言
public function message()
{
return 'The :attribute field must be a valid cron expression.';
}
为了使用它,您可以在表单请求中传递规则的实例
public function rules()
{
return [
'cron' => [new Cron],
];
}
在 Laravel 6 中,你不需要任何额外的模块。
最简单的方法是在
AppServiceProvider
类中扩展 Validator 对象:
public function boot() {
// ...
Validator::extend('cron', function ($attribute, $value, $parameters, $validator) {
return CronExpression::isValidExpression($value);
});
}
这是 Laravel 10 的验证规则:
<?php
namespace App\Rules;
use Closure;
use Cron\CronExpression as Cron;
use Illuminate\Contracts\Validation\ValidationRule;
class CronExpression implements ValidationRule
{
/**
* Run the validation rule.
*
* @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if (Cron::isValidExpression($value) === false) {
$fail("The $attribute field is not a valid cron expression.");
}
}
}
使用示例:
use App\Rules\CronExpression;
public function rules()
{
return [
'cron_expression' => [new CronExpression],
];
}