Ticked's avatar

L5.2 + Intervention Image. Updating image.

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');
    }
}
0 likes
1 reply
Ticked's avatar
Ticked
OP
Best Answer
Level 1

I had it wrong... 'enctype' => 'multipart/form-data' goes on the "form" not on the "field"

Delete from here...

<div class="form-group">
    {!! Form::label('photo', 'Photo:') !!}
    {!! Form::file('photo', null, ['class' => 'form-control', 'enctype' => 'multipart/form-data']) !!}
</div>

Add it here...

{!! Form::model($consultants, [
    'method' => 'PATCH',
    'enctype' => 'multipart/form-data',
    'action' => [
        'ConsultantsController@update', $consultants->id,
        'files' => true
        ]
]) !!}
    @include('cms.consultants.partials.form', ['submitButtonText' => 'Edit'])
{!! Form::close() !!}

Please or to participate in this conversation.