我一直在使用laravel几次,当我之前使用laravel 4时,我曾经将验证规则添加为模型的静态成员。像这样:
class Foo extends ValidatableModel
{
protected static $rules = [
'bar' => 'required'
];
}
ValidatableModel
扩展了Laravel的基础Model
,然后使用自定义方法填充属性。我没有fillable
财产。
现在,在Laravel 5中,我没有使用它,因为验证的进一步分离是好的。随着Request
的出现,您可以在其中指定规则,我现在使用fillable
属性,但我不喜欢您在fillable
属性中指定字段的重复项然后在特定的Request
对象中添加相同的字段。添加/删除数据库字段时工作量太大。
我认为fillable
属性是需要验证的属性。如果我在这里错了,请纠正我,但到目前为止,这是我的经历。
我有一些想法,但我仍然要测试它是否有效。基本上,我必须创建自己的基础Model
,我将从“对应的”fillable
类(基于命名约定)设置Request
的值。如下所示:
class FooRequest
{
public static $_RULES = [
'bar' => 'required'
];
public function authorize()
{
return true;
}
public function rules()
{
return self::$_RULES;
}
}
...
class ValidatableModel extends Model
{
public $fillable = [];
public static function boot()
{
parent::boot();
static::creating(function($model) {
$requestClass = 'come up based on naming convention';
$rules = $requestClass::$$_RULES;
$model->fillable = array_keys($rules);
});
}
}
我不知道这是否有效。我只是想着它,也许我会在回家时尝试一下。为了消除fillable
属性中的重复,看起来很多工作。
你们有什么想法?