在Laravel我有以下模型:
class Product extends Model {}
包含函数:
public function setThumbnailAttribute($value) {}
我有多个模型应该包含相同的setThumbnailAttribute()
函数。使用Laravel或基本PHP功能执行此操作的正确方法是什么?
答案 0 :(得分:5)
创建一个扩展Model的基础模型,并将该函数添加到此。
use Illuminate\Database\Eloquent\Model;
class BaseModel extends Model
{
public function setThumbnailAttribute($value)
{
// code here
}
}
然后,您可以使用新的基本模型扩展任何模型,以访问此功能。
class Product extends BaseModel
{
}
在访问全局函数的基础上,同样的逻辑也可以应用于控制器。
答案 1 :(得分:3)
如果此模型具有此方法的多个实现,请使用多态。但是,如果模型的方法是通用的,则选择第二个。
class Product extends AbstractThumbnailedModel
{
public function setThumbnailAttribute(Thumbnail $thumb)
{
// implement setter for Product
}
}
class AnotherProduct extends AbstractThumbnailedModel
{
public function setThumbnailAttribute(Thumbnail $thumb)
{
// implement setter for AnotherProduct
}
}
abstract class AbstractThumbnailModel extends Model
{
abstract public function setThumbnailAttribute(Thumbnail $thumb);
}
使用特征。创建特征Thumbnailed并在模型中需要时使用它。
trait Thumbnailed
{
public function setThumbnailedAttribute(Thumbnail $thumb)
{
// here implementaition which will share with needed models
}
}
class Product extends Model
{
use Thumbnailed;
// Use it!
}
class AnotherProduct extends Model
{
use Thumbnailed;
// same method implementation. Just use it!
}
P.S。对不起谷歌翻译