Hi,
L5.2 + Intervention Image. Updating image.
I'm having problems when UPDATING the photo.
When I create a new record the photo gets uploaded with the generated name and extension.
Also, the correct name and extension get saved on my DB.
When I "edit" the record the new photo doesn't upload and on the DB the existing file name changes to the name of the new photo I try to upload.
Any suggestions are very much appreciated.
My "create" partial
{!! Form::open([
'url' => 'content-management-system/consultants',
'files' => true
]) !!}
@include('cms.consultants.partials.form', ['submitButtonText' => 'Create'])
{!! Form::close() !!}
My "edit" partial
{!! Form::model($consultants, [
'method' => 'PATCH',
'action' => [
'ConsultantsController@update', $consultants->id,
'files' => true
]
]) !!}
@include('cms.consultants.partials.form', ['submitButtonText' => 'Edit'])
{!! Form::close() !!}
My form (I have cut other irrelevant fileds)
<div class="form-group">
{!! Form::label('photo', 'Photo:') !!}
{!! Form::file('photo', null, ['class' => 'form-control', 'enctype' => 'multipart/form-data']) !!}
</div>
<div class="form-group">
{!! Form::submit($submitButtonText, ['class' => 'btn btn-primary form-control']) !!}
</div>
My controller
<?php
namespace App\Http\Controllers;
use App\Category;
use App\Hospital;
use App\Language;
use App\Consultant;
use App\Http\Requests;
use App\Http\Requests\ConsultantRequest;
use Illuminate\Http\Request;
use Illuminate\httpResponse;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Image;
class ConsultantsController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index()
{
$consultants = Consultant::with('category')->orderBy('updated_at', 'DESC')->paginate(10);
return view('cms.consultants.index', compact('consultants'));
}
public function show($id)
{
$consultant = Consultant::findOrFail($id);
return view('cms.consultants.show', compact('consultant'));
}
public function create()
{
$languages = Language::lists('name', 'id');
$category = Category::lists('name', 'id');
$hospitals = Hospital::lists('name', 'id');
return view('cms.consultants.create', compact('languages', 'category', 'hospitals'));
}
public function store(ConsultantRequest $request)
{
$this->createConsultant($request);
flash('Your consultant has been created');
return redirect('content-management-system/consultants');
}
public function edit($id)
{
$consultants = Consultant::findOrFail($id);
$languages = Language::lists('name', 'id');
$category = Category::lists('name', 'id');
$hospitals = Hospital::lists('name', 'id');
return view('cms.consultants.edit', compact('consultants', 'languages', 'category', 'hospitals'));
}
public function update($id, ConsultantRequest $request)
{
$consultant = Consultant::findOrFail($id);
$consultant->update($request->all());
$this->syncLanguages($consultant, $request->input('language_list'));
$this->syncHospitals($consultant, $request->input('hospital_list'));
$this->fileUpload($request);
flash('Your consultant has been edited');
return redirect('content-management-system/consultants');
}
private function createConsultant(ConsultantRequest $request)
{
$consultant = Consultant::create($request->all());
$this->syncLanguages($consultant, $request->input('language_list'));
$this->syncHospitals($consultant, $request->input('hospital_list'));
$this->fileUpload($request);
return $consultant;
}
public function fileUpload(Request $request){
if($request->hasFile('photo')){
$photo = $request->file('photo');
$filename = time() . '.' . $photo->getClientOriginalExtension();
Image::make($photo)->resize(300, 300)->save( public_path('/uploads/consultants/images/' . $filename ) );
DB::table('consultants')
->where('photo', $photo)
->update(['photo' => $filename]);
}
}
private function syncLanguages(Consultant $consultant, $languages)
{
$consultant->languages()->sync((array)$languages);
}
private function syncHospitals(Consultant $consultant, $hospitals)
{
$consultant->hospitals()->sync((array)$hospitals);
}
public function destroy($id)
{
$result = Consultant::findOrFail($id);
$result->delete();
flash('Your consultant has been deleted');
return redirect('content-management-system/consultants');
}
}