2017-09-19 14 views
1

が、私は、単一の画像のファイルアップロード方法は、次のコードを使用して、正常に動作してい動作していない店舗()メソッド:Laravel突然

$file = $request->file('file'); 

if ($file && $file->isValid()) { 
    $photo['size'] = $request->file('file')->getClientSize(); 
    $path = $request->file('file')->store($request->subdomain); 
    $path = explode('/', $path); 
    $photo['file'] = $path[1]; 
    $photo['cover'] = 1; 
    $photo['gallery'] = $newGallery->id; 
    $photo['uploaded_by'] = $user->id; 
    Photo::create($photo); 
} 

$filestore()方法作品ここUploadedFileのインスタンスであり、完全に。

しかし、複数のファイルをアップロードできるようにするには、この方法を変更する必要がありました。次適応コードは、次のエラーをネット:

$photos = $request->files->all(); 

    foreach($photos as $photo) { 
     foreach($photo as $p) { 

      if($p->isValid()) { 
       $path = $p->store($request->subdomain); 
       $path = explode('/', $path); 

       $newPhoto = [ 
        'uploaded_by' => $user->id, 
        'file' => $path[1], 
        'size' => $p->getClientSize(), 
        'gallery' => $request->gallery, 
        'subdomain' => $request->subdomain, 
       ]; 

       Photo::create($requestData); 
      } 
     } 
    } 

Call to undefined method Symfony\Component\HttpFoundation\File\UploadedFile::store()

$pさんdd出力:

UploadedFile {#28 ▼ 
    -test: false 
    -originalName: "Untitled.png" 
    -mimeType: "image/png" 
    -size: 18030 
    -error: 0 
    path: "/tmp" 
    filename: "phpBDSWCR" 
    basename: "phpBDSWCR" 
    pathname: "/tmp/phpBDSWCR" 
    extension: "" 
    realPath: "/tmp/phpBDSWCR" 
    aTime: 2017-09-19 20:19:57 
    mTime: 2017-09-19 20:19:57 
    cTime: 2017-09-19 20:19:57 
    inode: 3014878 
    size: 18030 
    perms: 0100600 
    owner: 1000 
    group: 1000 
    type: "file" 
    writable: true 
    readable: true 
    executable: false 
    file: true 
    dir: false 
    link: false 
} 

Laravelが適切store()を持ってIlluminate\Http\UploadedFileを使用しなければならないとして、かなり奇妙ですメソッド(docs)は、そのメソッドを持たないSymfonyのクラス(docs

また、symfonyのmove()を使用すると、store()はすでに生成されたファイル名と拡張子を持つファイルを保存しているため、ランダムファイル名を生成して拡張子を推測する必要はありません。

ボトムラインはどうしてそういうふうに振る舞うのですが、どうすれば適切なクラスインスタンスを使うことができますか?

+0

のようなものをやってみてください;'出力? – Jonathon

+0

'' Symfony \ Component \ HttpFoundation \ File \ UploadedFile "' –

+0

以前の作業単一アップロードからの 'dd(get_class($ request-> file( 'file')')の出力: '' Illuminate \ Http \ UploadedFile '' –

答えて

2

使用しているストアメソッドは、リクエストインスタンスでのみ使用できます。

たぶん、あなたは `DD(get_class($ pを))何をして、この

foreach($photo as $index => $p) { 
    $request->file('files')[$index]->store(); 
} 
+0

'$ request-> file( 'files')'はIIRC例外をスローします。この方法を試して確認します。 –

+0

'$ photos = $ request-> file( 'files'); foreach($ photos as $ photo){ if($ photo-> isValid()){ $ path = $ photo-> store($ request-> subdomain); {...} '働いた!今私はアップロードしたすべての写真を保存していない別の問題を抱えていますが、それは他のビジネス全体です。ありがとう! –

+0

私は助けになることをうれしく思います。 –