2016-09-24 2 views
-1

안녕하세요 저는 Laravel에서 새로 왔으며이 간단한 문제를 겪었습니다. 나는 사용자가 어떤 기사를 만들 수 있고 그 기사에 대한 주 이미지를 업로드 할 수있는 앱을 가지고 있으며 완벽하게 작동합니다. 나는 또한 사용자가 자신의 기사에 대해 더 많은 이미지를 업로드 할 수있는 가능성을 부여하고자합니다. 이미 모델 (ArticleImage)을 만들고 ArticleImage와 ArticleImage 간의 관계를 추가합니다. 그리고 기사 양식 안에 여러 개의 파일을 업로드하기위한 양식 필드를 만들었습니다. 하지만 지금은 이러한 경로의 모든 이름을 데이터베이스에 저장하고 public/images 폴더 내에 이미지를 저장하는 laravel에게 나중에이 이미지를 사용할 수있는 뷰보다 나중에 알리는 방법을 알지 못합니다. 지금은 ArticleImage 컨트롤러와 내부 컨트롤러를 작성하여 그 기능을 작성해야합니까, 아니면 저장소 기능 내부의 아티클 컨트롤러 내부에서해야합니다. Tnx는 사전에 모든 도움을받습니다. 여기 는기사와 이미지 사이의 Laravel 5 relationsheep

답변

0

폼을 배열로 입력을 보내는 경우

$article->articleImages()->saveMany($images); 

는 희망이 당신의 문제를

+0

'$ files = $ request-> file ('images'); $ uploadcount = 0; foreach ($ 파일로 $ 파일) { $ destinationPath = public_path ('images /'); $ fname = $ file-> getClientOriginalName(); $ loc = $ file-> move ($ destinationPath, $ fname); $ uploadcount ++; }'이 코드는 ArticleController에 있지만이 코드의 모든 이름을 필드 이름의 article_images 테이블에 삽입하면 여기서부터 알 수 있습니다. ArticleImagesController 안에서 그렇게해야합니까? –

1

를 해결할 수 있음 GitHub의-REPO (https://github.com/Dabizlja/Laravel-blog)에 대한 링크입니다. 당신은 JSON 유형을 사용할 수 있습니다 저장에 당신의 ArticleController에서

<input name="picures[]" /> 

$files=[]; 
$pictures = $request['pictures']; 
if (count($pictures) > 0 && $pictures[0] != null) { 
     foreach ($pictures as $picture) { 
      $validator = Validator::make([$picture], ['mimes:jpeg,jpg,bmp,png']); 
      if ($validator->fails()) { 
       return $validator->messages()->all(); 
      } 

      $picture->move(public_path() . '/images/', $picture->getClientOriginalName()); 
      array_push($files, $picture->getClientOriginalName()); 
     } 
    } 
    $article->images = json_encode($files); 

편집에 컨트롤러에서보기

<?php 
    foreach ($images as $file) { 
    echo '<img src="'asset('/images/' . $file)'"/>'; 
    } 
?> 

에 다시 얻으려면이 JSON을 디코딩하는 것을 기억

$files = json_decode($article->images); 

그림을 삭제하려면 배열을 거쳐 같은 방법으로 제거해야합니다.

희망이 당신을 위해 작동합니다.

+0

'getClientOriginalName()'도 확장 기능을 제공하는지 기억하지 못합니다. 테스트 할 때 테스트하고 그렇지 않으면 save시 getClientOriginalExtension()을 연결하십시오. –