我只是在应用程序中实现了CRUD
,但UPDATE没有更新数据库I var_dump($user->name)
中的数据,但它什么也不输出。请看一下代码,帮我一下。我正在使用Laravel 5.2和资源控制器。
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>
用户模型:
<?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');
});
来自laravel文档:
https://laravel.com/docs/5.0/routing#method-欺骗
HTML表单不支持PUT、PATCH或DELETE操作。因此,当定义从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">
是因为您在发送表单时没有传递用户id吗?尝试将表单操作从{{ url('/users') }}
编辑为{{ url('/users', $userToUpdate->id) }}
。