Данные не обновляются в базе данных при обновлении Laravel 5.2

Я просто реализую CRUD в своем приложении, но UPDATE не обновляет данные в базе данных I var_dump($user->name), но ничего не выводит. Пожалуйста, взгляните на код и помогите мне. Я использую Laravel 5.2 и Resource Controller.

PS: Редактирование работает нормально, например, по этому URL-адресу http://localhost/pos/users/6/edit?id=6 Я могу заполнить поля просмотра необходимыми данными, но когда я нажимаю «Обновить», ничего не обновляется в базе данных.

Контроллер пользователя:

  public function edit($id)
        {
            $user = User::find($id);
            return view('user.update')->with('userToUpdate',$user);
        }

        /**
         * Update the specified resource in storage.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  int  $id
         * @return \Illuminate\Http\Response
         */
        public function update(Request $request, $id)
        {
            $user = User::find($id);
            $user->name = Input::get('name');
            $user->email = Input::get('email');
            $user->password = bcrypt(Input::get('password'));
            $user->save();      
            return Redirect::to('/users')->with('message', 'User Updated');
        }

Обновить представление:

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">Update</div>
                <div class="panel-body">
                    <form class="form-horizontal" role="form" method="PUT" action="{{ url('/users') }}">
                        {!! csrf_field() !!}

                        <div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}">
                            <label class="col-md-4 control-label">Name</label>

                            <div class="col-md-6">
                                <input type="text" class="form-control" name="name" value="{!! $userToUpdate->name !!}">

                            </div>
                        </div>

                        <div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
                            <label class="col-md-4 control-label">E-Mail Address</label>

                            <div class="col-md-6">
                                <input type="email" class="form-control" name="email" value="{!! $userToUpdate->email !!}">
                            </div>
                        </div>

                        <div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}">
                            <label class="col-md-4 control-label">Password</label>

                            <div class="col-md-6">
                                <input type="password" class="form-control" name="password" value="{!! $userToUpdate->password !!}">
                            </div>
                        </div>


                        <div class="form-group">
                            <div class="col-md-6 col-md-offset-4">
                                <button type="submit" class="btn btn-primary">
                                    <i class="fa fa-btn fa-user"></i>Update
                                </button>
                            </div>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>

UserModel:

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

Маршруты:

Route::group(['middleware' => 'web'], function () {
    Route::get('/', function () {
        return view('welcome');
    });

    Route::auth();

    Route::get('/home', 'HomeController@index');
    Route::get('/register', function(){
        return view('auth.register');
    })->middleware('isAdmin');
    Route::resource('/users', 'UsersController');

});

person Community    schedule 04.04.2016    source источник
comment
Использование метода PUT в HTML-форме нестандартно. Я заставляю его вести себя как форму GET, когда я пытаюсь это сделать.   -  person apokryfos    schedule 04.04.2016
comment
@apokryfos PUT для обновления, что еще я могу добавить?   -  person    schedule 04.04.2016


Ответы (2)


Из документов laravel:

https://laravel.com/docs/5.0/routing#method-spoofing

HTML-формы не поддерживают действия PUT, PATCH или DELETE. Таким образом, при определении маршрутов PUT, PATCH или DELETE, которые вызываются из HTML-формы, вам нужно будет добавить в форму скрытое поле _method.

Однако Route::resource указывает, что обновление должно использовать метод PUT. Поэтому ваша форма должна быть:

<form class="form-horizontal" role="form" method="POST" action="{{ url('/users', $userToUpdate->id) }}">
     {!! csrf_field() !!}
     <input type="hidden" name="_method" value="PUT">
person apokryfos    schedule 04.04.2016
comment
работал как шарм, но объясните этот момент, что в теге формы вы использовали метод = POST, а затем в скрытом поле Method = PUT Я этого не понял? - person ; 04.04.2016
comment
И еще 1 вещь, поскольку @Harry Loyd упомянул, что действие должно быть action={{ url('/users', $userToUpdate-›id) }}, то есть передать идентификатор вместе с действием, иначе это не сработает, я пробовал! - person ; 04.04.2016
comment
HTML-формы поддерживают только GET и POST. Laravel позволяет использовать скрытое поле _method для имитации остальных HTTP-команд (PUT, PATCH, DELETE) (отметьте laravel.com/docs/5.0/controllers#restful-resource-controllers о том, зачем это нужно). - person apokryfos; 04.04.2016

Это потому, что вы не передаете идентификатор пользователя при отправке формы? Попробуйте изменить действие формы с {{ url('/users') }} на {{ url('/users', $userToUpdate->id) }}.

person Harry Loyd    schedule 04.04.2016
comment
Все еще не обновляет данные в базе данных @Harry Loyd - person ; 04.04.2016
comment
на var_dump($user) ничего не отображается, когда я нажимаю обновить @Harry Loyd - person ; 04.04.2016
comment
Что произойдет, если вы var_dump($id) в функции обновления? он все еще установлен на ноль? - person Harry Loyd; 04.04.2016
comment
ОК, не совсем уверен, что еще это такое. С помощью var_dump() вы все равно должны увидеть вывод null, даже если переменная не установлена. Можете ли вы проверить элемент в своем браузере и дважды проверить правильность URL-адреса действия формы? - person Harry Loyd; 04.04.2016