Events laravel模型事件静态调用问题
为什么我的静态方法不适用于可变类Events laravel模型事件静态调用问题,events,laravel,model,static,Events,Laravel,Model,Static,为什么我的静态方法不适用于可变类 /** * Events */ public static function boot() { parent::boot(); $class = get_called_class(); // The value os $class is: Product ( string) // This work Product::creating(function($model) { re
/**
* Events
*/
public static function boot() {
parent::boot();
$class = get_called_class(); // The value os $class is: Product ( string)
// This work
Product::creating(function($model) {
return $model->validate();
});
// Don´t work, the closure never called!
$class::creating(function($model) {
return $model->validate();
});
$class::updating(function($model) {
return $model->validate(true);
});
}
难以置信,这项工作将:
$class = "Product"; //get_called_class();
解决方案不优雅,但
在我的产品模型上,我放了这个,与基本模型共享类名
public static function boot() {
parent::$cls = "Product";
parent::boot();
}
但是更新还不起作用 实际上,从PHP5.3开始,它应该可以:
$class = 'Product';
$class::creating(function($model){
return $model->validate();
});
但是为什么不直接使用来访问当前类呢?通过这种方式,您不需要获得所谓的课程:
还有一个问题是,如果其他一切都失败了…我使用get_called_类创建一个BaseModel泛型,由其他模型扩展。static::creating具有相同的效果!如果您在子模型中定义Product,它就可以工作,这意味着get_called_class不会返回ProductYes,我放了一些日志来检查,我不知道为什么,但这是真正的log show用户模型。可能是一个noob问题,XD!
static::creating(function($model){
return $model->validate();
});