如何在laravel上以一种形式使用两个控制器方法?

时间:2018-09-17 20:24:20

标签: laravel forms controller routes

我有一个productsController,它基本上很好地完成了CRUD。但是有一个问题。我的控制器方法过长。因此,我决定从产品中分离ImageController和Image表。因为图像需要具有CRUD。

但是,上传此项目的形式与上传图像相同。那么,从一种形式制作两个控制器的最佳实践是什么?路线也应该是什么样?


注意:这是一个普遍的问题。代码也太长。这就是为什么我没有在此处添加代码的原因。

1 个答案:

答案 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
    }
}