这是我的模型的工作原理。我有一个 Post 模型,它有一个 expires_at 列。用户提供他们希望帖子持续的天数的整数。
当我在控制器中进行验证时,这非常简单。只需验证“天”字段,然后将其转换为未来的到期日期。但现在我正在使用 Ardent 在模型中进行验证,但我不确定如何完成此操作。我想我需要使用一个 mutator,但是将 expires_at 设置为一个整数似乎违反直觉。我也不确定 Ardent 是否在突变之前或之后验证。
我想出了如何使用从确认字段等数据中删除冗余的代码来做到这一点。
public $autoPurgeRedundantAttributes = true;
function __construct() {
parent::__construct();
$this->purgeFilters[] = function($key) {
$purge = array('tempData', 'myAttribute');
return ! in_array($key, $purge);
};
}
您需要启用$autoPurgeRedundantAttributes
,否则过滤器将不会被调用。然后向$purgeFilters
数组添加一个闭包,如果应该删除提供的属性,则返回 false。(在这种情况下为“天”)
然后你只需要确保手动设置你想要验证的字段
$this->attributes['days'] = $value;
编辑:这现在在官方文档中。我用他们的代码替换了上面的代码。