Gil*_*ert 2 php laravel laravel-5
在Laravel我有以下型号:
class Product extends Model {}
Run Code Online (Sandbox Code Playgroud)
其中包含以下功能:
public function setThumbnailAttribute($value) {}
Run Code Online (Sandbox Code Playgroud)
我有多个模型应该包含相同的setThumbnailAttribute()功能.使用Laravel或基本PHP功能执行此操作的正确方法是什么?
创建一个扩展Model的基础模型,并将该函数添加到此模型中.
use Illuminate\Database\Eloquent\Model;
class BaseModel extends Model
{
public function setThumbnailAttribute($value)
{
// code here
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用新的基本模型扩展任何模型,以访问此功能.
class Product extends BaseModel
{
}
Run Code Online (Sandbox Code Playgroud)
在访问全局函数的基础上,也可以将相同的逻辑应用于控制器.
小智 5
如果此模型具有此方法的多个实现,请使用多态性。但是,如果方法对于模型通用,请选择第二个。
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);
}
Run Code Online (Sandbox Code Playgroud)使用特质。创建特征缩略图并在模型需要时使用它。
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!
}
Run Code Online (Sandbox Code Playgroud)PS抱歉谷歌翻译
| 归档时间: |
|
| 查看次数: |
392 次 |
| 最近记录: |