Функция обновления продолжает выдавать исключение MethodNotAllowedHttpException в Laravel 5.4

Я пытаюсь обновить значения через форму, но получаю сообщение об ошибке снова и снова. ошибка при обновлении

вот код лезвия

    <div class="container" >
      <div class="row">
   <div class="col-md-12" style="margin-top: 50px; padding-left: 25em">
            <div class="col-md-3">
                <img src="{{$user->photo ? asset($user->photo->file) : 
asset('image/default.png')}}" style="width: 150px; height: 150px; float: 
left; border-radius: 50%; margin-right: 25px">
            </div>
            <div class="col-md-9 ">
                {!! Form::model($user, ['method'=>'PUT' ,'action'=>
['ProfileController@update',$user->id],'files'=>true])!!}
                <div class=form-group style="margin: 50px">
                    <h2>{{$user->name}}'s profile</h2>
                    {!! Form::label('name','Name :') !!}
           {!! Form::text('name', null , ['class'=>'form-control'])!!}
           {!! Form::label('email', 'Email :') !!}
           {!! Form::text('email', null, ['class'=>'form-control']) !!}
           {!! Form::label('photo_id', 'Profile Picture :') !!}
           {!! Form::file('photo_id', null, ['class'=>'form-control']) !!}
           {!! Form::label('password', 'Password:') !!}
         {!! Form::password('password', null, ['class'=>'form-control']) !!}

                </div>
            </div>
     <div class="row" style="padding-top: 20px; padding-left: 50%;">
        {!! Form::submit('Update Profile', ['class'=>'btn btn-info']) !!}
                {!! Form::close() !!}
            </div>
        </div>
    </div>
</div>

А вот и часть контроллера

 public function updateProfile(UserRequest $request, $id)
   {
    $user = User::findOrFail($id);
        if (trim($request->password)==''){
            $input = $request->except('password');
        }
        else{
            $input = $request->all();
            $input['password'] = bcrypt($request->password);
        }
        if ($request->file('photo_id'== '')){
            $input = $request->except('photo_id');
        }
        elseif ($file = $request->file('photo_id')){
            $name = time() . $file->getClientOriginalName();
            $file->move('image', $name);
            $photo = Photo::create(['file'=>$name]);
            $input['photo_id'] = $photo->id;
        }
        $user->update($input);
    //  Session::flash('edited_profile','The profile has been updated');
   // $input['password'] = bcrypt($request->password);
        return redirect('/');
  // return $request->all();
  }

Я подумал, что это может быть из-за неправильного назначения маршрутов, поэтому я сделал их отличными от ресурсов список маршрутов

Route::resource('/profile/', 'ProfileController');
Route::get('/profile/{id}', 'ProfileController@editProfile')
   ->name('editProfile');
   Route::post('/profile/{id}', 'ProfileController@updateProfile')
   ->name('updateProfile');

когда я пытался получить представление через ProfileController @ edit route, я получал  error on edit view ошибка. Я сделал маршрут ProfileController @ editProfile, и он начал давать мне представление, но обновление все еще не работает


person Hassaan    schedule 08.02.2018    source источник
comment
Вы добавили токен csrf? Также попробуйте это с закомментированными маршрутами Route :: get и Route :: post.   -  person connormcwood    schedule 08.02.2018
comment
Ваш код немного запутан, ваши маршруты предполагают, что у вас есть два метода обновления, один называется @update (), один называется @updateProfile, первый использует метод put, а второй использует метод post, вы должны иметь возможность решите сами, если удалите повторяющиеся методы   -  person UX Labs    schedule 08.02.2018
comment
пробовал, но не работал @UX Labs   -  person Hassaan    schedule 08.02.2018
comment
включил это тоже, но это не решило @connormcwood   -  person Hassaan    schedule 08.02.2018


Ответы (2)


Проблема с отсутствием обновления заключается в том, что ваша форма отправляется через PUT, и вы заявили, что это почтовый вызов в своих маршрутах. Таким образом, любое из приведенных ниже решений решит проблему:

Решение 1

update.blade.php

{!! Form::model($user, 
     ['method' => 'PUT',
      'action' => [
         'ProfileController@update',$user->id
      ],
      'files' => true
    ])
!!}

web.php

Route::put('/profile/{id}', 'ProfileController@updateProfile')->name('updateProfile');

Решение 2

update.blade.php

{!! Form::model($user, 
     ['method' => 'POST',
      'action' => [
         'ProfileController@update',$user->id
      ],
      'files' => true
    ])
!!}

web.php

Route::post('/profile/{id}', 'ProfileController@updateProfile')->name('updateProfile');
person Nikola Gavric    schedule 08.02.2018

Проблема заключается в определении маршрута вашего ресурса. Вы добавили косую черту в конце, и это испортило определенные маршруты.

При определении маршрута ресурса элемент после последней косой черты в определении является ресурсом, а все, что до него, - просто префиксом маршрута. Итак, с определением /profile/ ваш ресурс пуст, а ваш префикс маршрута - "/ profile". Вот почему ваши маршруты определены неправильно и работают не так, как ожидалось.

Удалите косую черту в конце, и маршрутизация ресурсов вашего профиля будет работать:

Route::resource('profile', 'ProfileController');

Вы также можете избавиться от двух дополнительных маршрутов, которые вы определили.

person patricus    schedule 08.02.2018