2016-04-04 19 views
1

私のアプリケーションにCRUDを実装するだけですが、UPDATEはデータベースIのデータを更新しませんvar_dump($user->name)しかし、何も出力しません。コードを見て、私を助けてください.Laravel 5.2とResource Controllerを使用しています。更新時にデータが更新されないLaravel 5.2

PS:このURLの編集は正常に動作しています。http://localhost/pos/users/6/edit?id=6ビューフィールドに必要なデータを入力できますが、更新時にデータベースに何も更新されません。

UserControllerで:

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'); 
     } 

UpdateView:

@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', '[email protected]'); 
    Route::get('/register', function(){ 
     return view('auth.register'); 
    })->middleware('isAdmin'); 
    Route::resource('/users', 'UsersController'); 

}); 
+1

HTMLフォームでのPUTメソッドの使用は非標準です。私はそれを試してみるとGETフォームとして動作するようになっています。 – apokryfos

+0

@apokryfos PUTは更新用ですが、他に何を追加できますか? –

答えて

3

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

HTMLフォームは、PUTをサポートPATCHまたはアクションを削除しないでください。したがって、HTMLフォームから呼び出されるPUT、PATCH、またはDELETEルートを定義するときは、フォームに非表示の_methodフィールドを追加する必要があります。

ただし、Route ::リソースは、更新プログラムがPUTメソッドを使用する必要があることを指定します。したがって、フォームは次のようにする必要があります。

<form class="form-horizontal" role="form" method="POST" action="{{ url('/users', $userToUpdate->id) }}"> 
    {!! csrf_field() !!} 
    <input type="hidden" name="_method" value="PUT"> 
+0

は魅力的に働いていましたが、フォームタグではmethod = POSTを使用してから非表示フィールドでMethod = PUTを使用しました。 –

+0

もう1つの@Harry Loydは、アクションはaction = "{{url( '/ users'、$ userToUpdate-> id)}}でなければならないと述べています。 –

+1

HTMLフォームはGETとPOSTのみをサポートしています。Laravelでは、隠しフィールド '_method'を使用して残りのHTTP動詞(PUT、PATCH、DELETE)をシミュレートすることができます(https://laravel.com/docs/5 。0/controllers#restful-resource-controllersなぜこれが必要なのか)。 – apokryfos

3

フォームをオフに送信するときに、あなたのユーザーIDを渡していないので、それか?フォームアクションを{{ url('/users') }}から{{ url('/users', $userToUpdate->id) }}に編集してみてください。 laravelドキュメントから

+0

まだデータベースのデータを更新していません@Harry Loyd –

+0

var_dump($ user)更新@Harry Loydにヒットすると何も表示されません –

+0

更新機能のvar_dump($ id)はどうなりますか?まだnullに設定されていますか? –

関連する問題