2016-04-16 12 views
0

私は記事と変更写真を編集するには、このフォームを持っている:コントローラで今 はLaravelアップデートに写真をアップロード

<h1>Edit: {{$article->title}}</h1> 
       <hr> 

       {!! Form::model($article, ['method'=>'PATCH','files' => true, 'action'=>['[email protected]', $article->id]]) !!} 
       @include('articles.form',['submitButtonText'=>'Update Article']) 

       {!! Form::close() !!} 


       @include('errors.list') 

私はこの機能を持っている:

public function update($id, Requests\ArticleRequest $request) 
{ 
    $photo= 'http://nationaluasi.com/dru/content/hotelIcon.png'; 
    $file = array('photo' => $request->file('photo')); 

    // setting up rules 
    $rules = array('photo' => 'required',); //mimes:jpeg,bmp,png and for max size max:10000 

    // doing the validation, passing post data, rules and the messages 
    $validator = Validator::make($file, $rules); 

    if ($validator->fails()) { 
     // send back to the page with the input data and errors 
     $photo = 'http://nationaluasi.com/dru/content/hotelIcon.png';    
    } 
    else { 
    // checking file is valid. 
     if ($request->file('photo')->isValid()) { 
      $destinationPath = public_path().'/images'; // upload path 
      $extension = $request->file('photo')->getClientOriginalExtension();    // getting image extension 
      $photo = str_random(5).'.'.$extension; // renameing image 
      $request->file('photo')->move($destinationPath, $photo); // uploading file to given path 
      // sending back with message 

     } 
     else { 

     } 
    } 

    $article = Auth::user()->articles()->findOrFail($id); 
    $article['photo'] = $photo; 
    $article->update($request->all()); 

    Alert::message('Your auction is updated', 'Wonderful!'); 

    return redirect('auctions'); 
} 

を今私は、アップロードされた写真を提出しようとすると、この結果はphotoC:\wamp\tmp\php21F4.tmpにありますが、画像は/imagesというフォルダにアップロードされています...

ここで問題は何ですか?

I:...方法にstoreすべてが同じであるように、写真を追加し、正常に動作

UPDATEの - どのようにも、私は私が記事を追加したときにはすべて大丈夫ですと言いたい...記事を更新します試してみてください。

$article = Auth::user()->articles()->findOrFail($id); 
     $article['photo'] = $photo; 
     dd($photo); 

をし、すべてがうまくされ、写真が正常にアップロードされただけで私は記事[ '写真']を更新していけない...ので、問題はここにある:

$ article->更新($要求 - >すべて());

しかし、どのようにそれを解決するには?なぜ記事['写真']が更新されないのですか?

+0

$ article-> photo = $ photo; $ article-> save(); –

+0

いいえ、もう一度同じです... – Andrew

答えて

1

コードを修正しようとしましたが、これを使用してください。

public function update($id, Requests\ArticleRequest $request) 
    { 
     $this->validate($request, [ 
      'photo' => 'required|image|max:10000', 
      // validate also other fields here 
     ]); 

     // checking file is valid. 
     if (!$request->file('photo')->isValid()) return redirect()->back()->withErrors(["photo" => "File is corrupt"]); 

     // file is valid 
     $destinationPath = public_path().'/images'; // upload path 
     $extension = $request->file('photo')->getClientOriginalExtension(); // getting image extension 
     $filename = str_random(5).'.'.$extension; // give a name to the image 
     $request->file('photo')->move($destinationPath, $filename); // uploading file to given path 
     // sending back with message 

     $article = Auth::user()->articles()->findOrFail($id); //if article id is unique just write Article::findOrFail($id) 
     $article_fields = $request->except('photo'); 
     $article_fields['photo'] = $filename; 
     $article->update($article_fields); 

     Alert::message('Your auction is updated', 'Wonderful!'); 

     return redirect('auctions'); 
    } 
+1

はい、この作品、ありがとう! – Andrew

1

私は、問題はこのラインであると考えているあなたはLaravel 5を使用していると仮定します:

$article->update($request->all()); 

更新方法は、列と値のペアの配列を期待しています。上記のコードでは、新しい写真の場所が含まれていないオリジナルの(変更されていない)リクエストを提供しています。

Laravelでは、記事オブジェクトを実際に取得し、オブジェクト内で直接列を設定してから変更を保存することができます。より詳細な説明のためのLaravel documentationを見てみましょう

$article = Auth::user()->articles()->findOrFail($id); // get the article 
    $article->photo = $photo; // set the photo column to your new location 
    $article->save(); // this will save your changes 

    Alert::message('Your auction is updated', 'Wonderful!'); 

    return redirect('auctions'); 

はにあなたの方法の最後の数行を変更してみてください。

+0

しかし、私は$ article-> nameのような他の多くのデータも持っています...それをすべてどのように含めるのですか? – Andrew

+0

私の意見では、保存する前にユーザーの入力を検証する必要があるため、上記の方法と同様の方法で更新を行うべきです。 –

+0

しかし、上記の回答は有効です... – Andrew