2017-04-04 127 views
0

我正在研究一个简单的CMS,其中我有一个图片上传问题,因为它只是刷新了创建/编辑页面,而不是上传图片。它在我注释掉图像部分时起作用。Laravel图片上传不起作用

这是我的代码:

public function create() 
{ 
    $packages = Package::all(); 

    return view('packages.create')->withPackages($packages); 
} 

/** 
* Store a newly created resource in storage. 
* 
* @param \Illuminate\Http\Request $request 
* @return \Illuminate\Http\Response 
*/ 
public function store(Request $request) 
{ 
    $this->validate($request, array(

     'title'  => 'required|max:30', 
     'content' => 'required|max:255', 
     'price'  => 'required|max:15', 
     'icon'  => 'required|image' 

    )); 

    $package = new Package; 

    $package->title = $request->title; 
    $package->content = $request->content; 
    $package->price = $request->price; 

    if ($request->hasFile('icon')){ 
     $image = $request->file('icon'); 
     $filename = time() . '.' . $image->getClientOriginalExtension(); 
     $location = public_path('img/' . $filename); 
     Image::make($image)->resize(300,300)->save($location); 

     $package->image = $filename; 
    } 

    $package->save(); 

    return redirect()->route('packages.index'); 
} 

/** 
* Display the specified resource. 
* 
* @param int $id 
* @return \Illuminate\Http\Response 
*/ 
public function show($id) 
{ 
    // 
} 

/** 
* Show the form for editing the specified resource. 
* 
* @param int $id 
* @return \Illuminate\Http\Response 
*/ 
public function edit($id) 
{ 
    $package = Package::find($id); 
    return view('packages.edit')->withPackage($package); 
} 

/** 
* Update the specified resource in storage. 
* 
* @param \Illuminate\Http\Request $request 
* @param int $id 
* @return \Illuminate\Http\Response 
*/ 
public function update(Request $request, $id) 
{ 
    $this->validate($request, array(

     'title'  => 'required|max:30', 
     'content' => 'required|max:255', 
     'price'  => 'required|max:15', 
     'icon'  => 'required|image' 

    )); 

    $package = Package::find($id); 

    $package->title = $request->title; 
    $package->content = $request->content; 
    $package->price = $request->price; 

    if ($request->hasFile('icon')){ 
    //Add new photo 
     $image = $request->file('icon'); 
     $filename = time() . '.' . $image->getClientOriginalExtension(); 
     $location = public_path('img/' . $filename); 
     Image::make($image)->resize(300,300)->save($location); 

     $oldFilename = $package->image; 
    //Update DB 
     $package->image = $filename; 

    //Delete the old photo 
     Storage::delete($oldFilename); 
    } 

    $package->save(); 

    //Set flash data with success message 
    Session::flash('success', 'Pakkeløsningen blev opdateret!'); 

    // Redirect with flash data to posts.show 
    return redirect()->route('packages.index'); 
} 

,这是我的PackageController

 {!! Form::open(['route' => 'packages.store']) !!} 

      {{ Form::label('title', 'Titel:') }} 
      {{ Form::text('title', null, array('class'=>'form-control', 'required' => '', 'maxlength' => '255')) }} 

      {{ Form::label('content', 'Indhold:') }} 
      {{ Form::text('content', null, array('class'=>'form-control', 'required' => '', 'maxlength' => '255')) }} 

      {{ Form::label('price', 'Pris:') }} 
      {{ Form::text('price', null, array('class'=>'form-control')) }} 

      {{ Form::label('icon', 'Vælg ikon') }} 
      {{ Form::file('icon') }} 

      {{ Form::submit('Lav pakkeløsning!!', array('class' => 'btn btn-success btn-lg btn-block','style' => 'margin-top:20px;')) }} 

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

Aaaand我的路线create.blade.php中,这正是我想的东西

情况
Route::resource('packages', 'PackageController'); 

我在我的提供程序和别名中都有干预图像,我确实有它们的名称空间在m控制器像这样:

namespace App\Http\Controllers; 
use App\Package; 
use Session; 
use Image; 
use Storage; 

在此先感谢!我希望我不会困扰任何有愚蠢初学者问题的人:)

回答

0

您缺少enctype属性。

编辑create.blade.php形式像下面

{!! Form::open(['route' => 'packages.store', 'enctype' => 'multipart/form-data']) !!} 
+0

开太感谢你了! :d –