我有一个productsController,它基本上很好地完成了CRUD。但是有一个问题。我的控制器方法过长。因此,我决定从产品中分离ImageController和Image表。因为图像需要具有CRUD。
但是,上传此项目的形式与上传图像相同。那么,从一种形式制作两个控制器的最佳实践是什么?路线也应该是什么样?
注意:这是一个普遍的问题。代码也太长。这就是为什么我没有在此处添加代码的原因。
答案 0 :(得分:1)
这是一个非常广泛的问题,但似乎您需要在Product和Image模型之间建立关系(假设您使用的模型与问题中提到的控制器一起使用),以便Product具有一个Image。然后,当您保存产品时,可以像下面这样在Image上调用store Image方法:
$ product-> image-> storeImage($ img);
$ img是您要上传的图像文件。关系看起来像这样:
Products.php:
public function image()
{
return $this->hasOne('App\Image');
}
Image.php:
public function product()
{
return $this->belongsTo('App\Product');
}
这不是一个详尽的答案,但是希望您能以正确的道路入手。当然,您仍然需要在Image模型上添加其他代码,例如自定义“ store”功能,并确保已正确进行迁移(Image模型上的article_id,Product模型上的image_id),但是将是分离代码并使控制器更轻便的一种方法。这是在Image.php模型中存储图像的示例:
class Image extends Model {
public function storeImage($img){
//code goes here to store image
}
}