簡體   English   中英

如何解決“類型錯誤:傳遞給...的參數2必須是Symfony \ Component \ HttpFoundation \ File \ UploadedFile”的實例?

[英]How can I solve “Type error: Argument 2 passed to … must be an instance of Symfony\Component\HttpFoundation\File\UploadedFile”?

我的控制器是這樣的:

public function store(CreateProductRequest $request)
{
    ...
    $result = $this->product_service->createProduct($param,$photo);
    ...
}

我的服務是這樣的:

public function createProduct($param, UploadedFile $photo=null)
{
    dd($photo);
    if($photo) {
        $fileName = str_random(40) . '.' . $photo->guessClientExtension();
        $param['photo'] = $fileName;
        $param['photo_list'] = json_encode(['id'=>1,'name'=>$fileName]);
    }
    ...
    if(is_array($result) && count($result)>1 && $result[0])
        $this->savePhoto($photo, $fileName,$result[1]->id);
    ...
    return $result;
}

private function savePhoto(UploadedFile $photo, $fileName, $id)
{
    $destinationPath = public_path() . DIRECTORY_SEPARATOR . 'img'. DIRECTORY_SEPARATOR .'products'.DIRECTORY_SEPARATOR.$id;
    $photo->move($destinationPath, $fileName);
    resize_image($fileName,250,'products',$id);
    return $fileName;
}

Symfony \\ Component \\ HttpFoundation \\ File \\ UploadedFile是這樣的: https ://pastebin.com/KLfnXZJV

當變量$photo不是數組或只有1個數據時,我會做dd($photo); ,它顯示結果

但是當變量$photo是數組時,我會做dd($photo); ,有錯誤:

類型錯誤:傳遞給App \\ Services \\ ProductService :: createProduct()的參數2必須是Symfony \\ Component \\ HttpFoundation \\ File \\ UploadedFile的一個實例,給出數組

我怎么解決這個問題?

這里的問題是你要么獲得單個文件,要么獲得一組文件。 創建產品支持上傳多個文件嗎? 如果沒有,你可以這樣做:

// If file is inside an array, pull it out
if (is_array($photo) && $photo[0] instanceof UploadedFile) {
    $photo = $photo[0];
}

// Run upload
$result = $this->product_service->createProduct($param, $photo);

如果您需要能夠上傳多個文件,則需要執行一些操作。 首先,您不能將您的方法鍵入提示為UploadedFile 相反,將其鍵入作為數組:

public function createProduct($param, array $photos = [])

然后在您的createProduct邏輯中,您需要遍歷照片數組並單獨保存。

最后,在你的控制器中,你需要做與第一個建議相反的操作,而不是數組中提取,你需要把它放在一個:

if ($photo instanceof UploadedFile) {
    $photo = [$photo];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM