我正在使用Laravel 5.2,并使用Eloquent ORM来处理数据库。我尝试更新数据库中的用户数据,但是当我单击UPDATE
按钮时,它给出了以下错误。我正在使用PUT
方法根据Laravel REST规则更新数据库中的数据。
错误网址 :
http://localhost/users?_token=wazgR1tQaznQwRdejXdx4g3jLgbtlfPLIeIiXdRy&name=warka&email=&password=
错误:
找不到对象!
在此服务器上找不到请求的 URL。链接上的 引用页面似乎错误或过时。请告知作者 关于错误的该页面。
如果您认为这是服务器错误,请与网站站长联系。
错误 404
localhost Apache/2.4.12 (Win32) OpenSSL/1.0.1l PHP/5.6.8
用户控制器:
<?php
namespace App'Http'Controllers;
use Illuminate'Http'Request;
use App'Http'Requests;
use Illuminate'Support'Facades'Validator;
use Illuminate'Support'Facades'Input;
use Illuminate'Support'Facades'Redirect;
use Illuminate'Support'Facades'View;
use App'User;
class UsersController extends Controller
{
public function create(){
return view('create');
}
public function store(){
$rules = array(
'name' => 'required|unique:users',
'email' => 'required|unique:users',
'password' => 'required|min:5'
);
$validator = Validator::make(Input::all(),$rules);
if($validator->fails()){
return Redirect::to('http://localhost/laravelking/users/create')->withInput()->withErrors($validator);
}else{
User::create(array(
'name' => Input::get('name'),
'email' => Input::get('email'),
'password' => Input::get('password')
));
return Redirect::to('http://localhost/laravelking/users');
}
}
public function index(){
return view::make('users')->withUsers(User::all());
}
public function show($id){
$user = User::find($id);
if($user == null){
return Redirect::to('http://localhost/laravelking/users');
}else{
return View::make('profile')->withUser($user);
}
return 'list '.$id;
}
public function update($id){
$rules = array(
'name' => 'required|unique:users',
'email' => 'required|unique:users',
'password' => 'required|min:5'
);
$validator = Validator::make(Input::all(),$rules);
if($validator->fails()){
return Redirect::to('http://localhost/laravelking/users/'.$id.'/edit')->withInput()->withErrors($validator);
}else{
$user = User::find($id);
if(Input::has('name')) $user->name = Input::get('name');
if(Input::has('email')) $user->email = Input::get('email');
if(Input::has('password')) $user->password = Input::get('password');
$user->save();
return Redirect::to('http://localhost/laravelking/users/'.$id);
}
}
public function edit($id){
$user = User::find($id);
if($user == null){
return Redirect::to('http://localhost/laravelking/users');
}else{
return View::make('edit')->with('id',$id);
}
}
public function delete($id){
return 'list'.$id;
}
}
查看更新表格 :
<form role="form" method="PUT" action="users/".$id>
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group">
<label for="username">New Name:</label>
<input type="username" class="form-control" name="name" id="name">
</div>
<div class="form-group">
<label for="email">New Email address:</label>
<input type="email" name="email" class="form-control" id="email">
</div>
<div class="form-group">
<label for="pwd">New Password:</label>
<input type="password" name="password" class="form-control" id="pwd">
</div>
<div class="checkbox">
<label><input type="checkbox"> Remember me</label>
</div>
<button type="submit" class="btn btn-default">Update</button>
</form>
个人资料视图 从哪里进入更新视图是:
<div class="container">
<div class="col-md-8 col-lg-8 col-sm-12">
<div class="jumbotron">
<h1> Hello {!! $user->name !!}</h1>
<h3> Your Email is {!! $user->email !!}</h3>
<h3 style="color:red"> Your Password is {!! $user->password !!}</h3>
<h1> {!! Html::link('users/'.$user->id.'/edit','Edit ') !!}</h1>
</div>
</div>
</div>
路线:
Route::group(['middleware' => ['web']], function () {
//
Route::resource('users','UsersController');
});
更新:
刚刚将表单方法更改为: <form role="form" action='http://localhost/laravelking/users/<?php echo $id; ?>' method="PUT">
即$id PHP 回显,它有效,但数据库中的数据没有更新!
新 URL 现在如下所示:
http://localhost/laravelking/users/1?_token=wazgR1tQaznQwRdejXdx4g3jLgbtlfPLIeIiXdRy&name=Lololololol&email=Lololololol%40gaic.com&password=Lololololol
但问题是数据库中的数据没有更新
您的应用程序位于 laravelking 目录中,但您的表单正在向 http://localhost 发送请求。
您最好将表单操作更改为如下所示的内容:
<form action="{{url('users/' . $id)}}" ... >
由于 HTML 表单不支持 PUT、PATCH 和 DELETE 方法,因此您需要添加一个附加字段才能完成此操作:
<input name="_method" type="hidden" value="PUT">
或者你可以使用一些Laravel助手:
// Plain PHP
echo method_field('PUT');
//Blade template engine
{{ method_field('PUT') }}
您可以在此处阅读有关此内容的更多信息: Laravel HTTP 路由 - 方法欺骗