改变laravel中验证类的属性值



如何在laravel中更改验证类的属性值?考虑以下代码:

class Twice implements Rule
{ 
public function passes($attribute, $value)
{
$value = $value * 2;
return $value > 20;
}
}

,现在我们收到值乘以2在得分属性:

$rules = [
'score' => [new Twice]
]

如果不行,你有什么建议?

您可以在验证器类中使用prepareForValidation方法:

protected function prepareForValidation()
{
$this->merge([
'score' => $this->score * 2
]);
}

这将改变score的值为score * 2,并使用该值进行任何验证,并返回该值与您的请求数据。

这样做,您也不需要在规则的passes方法中使用它,因为传入的score将已经乘以2:

public function passes($attribute, $value)
{
return $value > 20;
}

或者你甚至可以跳过自定义规则,直接使用:

$rules = [
'score' => 'min:21'
]

实际上我们正在尝试将我们庞大的应用程序从yii2迁移到laravel。

在yii2框架中,我们制作了一些规则类,在插入到数据库之前调整数据,例如" convertoenglishhnnumber "转换成"波斯语"数字(۱۲۳۴۵)转换成"英文";数字(12345)。

public function rules()
{
return [
['content', ConverToEnglishNumber::class]
]
}

,但在laravel验证规则类中似乎不可能。经过一天的努力,我认为使用强制类型转换是最好的方法:

namespase AppCasts;
use IlluminateContractsDatabaseEloquentCastsAttributes;
class Double implements CastsAttributes
{
public function set($model, $key, $value, $attributes)
{
return $value * 2;
}
}
namespace AppModels;
use AppCastsDouble;
use IlluminateDatabaseEloquentModel;
class Player extends Model
{
protected $casts = [
'score' => Double::class
];
}

最新更新