Laravel 7:读取单个资源无效
Laravel 7: Read single resource not working
我是 Laravel 的新手,我正在构建一个简单的用户注册系统。
当我访问编辑路径时,它似乎没有获取请求的资源数据。
我做了一些研究,我读过的所有东西都已经到位了。我错过了什么吗?
web.php(路由器):
use Illuminate\Support\Facades\Route;
// USER PAGES:
Route::resource('users', 'UsersController');
UsersController.php:
namespace App\Http\Controllers;
use App\Users;
use Illuminate\Http\Request;
class UsersController extends Controller
{
/**
* Show the form for editing the specified resource.
*
* @param \App\Users $users
* @return \Illuminate\Http\Response
*/
public function edit(Users $users)
{
return view('dashboard.user.edit', compact('users'));
}
/**
* Remove the specified resource from storage.
*
* @param \App\Users $users
* @return \Illuminate\Http\Response
*/
public function destroy(Users $users)
{
$users->delete();
return redirect()->route('users.index')
->with('success', "User was removed successfully.");
}
}
edit.blade.php:
<form id="user-data" action="{{route('users.update',$users->id)}}" method="POST" enctype="multipart/form-data">
@csrf
@method('PUT')
<input type="file" id="input-user-photo" name="user_avatar" style="display: none;">
<div class="card">
<div class="card-header">User Data</div>
<div class="card-body card-block">
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-user"></i>
</div>
<input type="text" id="username" name="name" placeholder="Username" class="form-control" value="{{$users->name}}">
</div>
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-envelope"></i>
</div>
<input type="email" id="email" name="email" placeholder="Email" class="form-control" value="{{$users->email}}">
</div>
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-asterisk"></i>
</div>
<input type="password" id="password" name="password" placeholder="Password (For not changing, leave it blank)" class="form-control">
</div>
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-asterisk"></i>
</div>
<input type="password" id="password-confirmation" placeholder="Password Confirmation" class="form-control">
</div>
</div>
<div class="form-actions form-group">
<a class="btn btn-secondary btn-md" href="<?php echo $_SERVER['HTTP_REFERER']; ?>">Cancel</a>
<button type="submit" class="btn btn-success btn-md">Submit</button>
</div>
</div>
</div>
</form>
在屏幕上(URL:/users/{{$anyUserId}}/edit):
此外,当我访问 destroy 路由时,它会到达正确的控制器方法“destroy”,甚至会正确重定向,并显示方法中指定的成功消息,但资源不会从数据库中删除。在这两种情况下,在我看来,它都没有找到在这些方法中作为参数注入的资源。
有线索吗?提前致谢!
如果资源名称是users
,路由参数将是user
(单数)。使用资源路由时,路由参数默认为资源名称的单数形式。
要使隐式路由模型绑定起作用,您需要方法的类型提示参数与路由参数相匹配:
public function edit(Users $user)
public function destroy(Users $user)
旁注:模型名称通常是单数,表格是复数。
我是 Laravel 的新手,我正在构建一个简单的用户注册系统。
当我访问编辑路径时,它似乎没有获取请求的资源数据。
我做了一些研究,我读过的所有东西都已经到位了。我错过了什么吗?
web.php(路由器):
use Illuminate\Support\Facades\Route;
// USER PAGES:
Route::resource('users', 'UsersController');
UsersController.php:
namespace App\Http\Controllers;
use App\Users;
use Illuminate\Http\Request;
class UsersController extends Controller
{
/**
* Show the form for editing the specified resource.
*
* @param \App\Users $users
* @return \Illuminate\Http\Response
*/
public function edit(Users $users)
{
return view('dashboard.user.edit', compact('users'));
}
/**
* Remove the specified resource from storage.
*
* @param \App\Users $users
* @return \Illuminate\Http\Response
*/
public function destroy(Users $users)
{
$users->delete();
return redirect()->route('users.index')
->with('success', "User was removed successfully.");
}
}
edit.blade.php:
<form id="user-data" action="{{route('users.update',$users->id)}}" method="POST" enctype="multipart/form-data">
@csrf
@method('PUT')
<input type="file" id="input-user-photo" name="user_avatar" style="display: none;">
<div class="card">
<div class="card-header">User Data</div>
<div class="card-body card-block">
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-user"></i>
</div>
<input type="text" id="username" name="name" placeholder="Username" class="form-control" value="{{$users->name}}">
</div>
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-envelope"></i>
</div>
<input type="email" id="email" name="email" placeholder="Email" class="form-control" value="{{$users->email}}">
</div>
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-asterisk"></i>
</div>
<input type="password" id="password" name="password" placeholder="Password (For not changing, leave it blank)" class="form-control">
</div>
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-asterisk"></i>
</div>
<input type="password" id="password-confirmation" placeholder="Password Confirmation" class="form-control">
</div>
</div>
<div class="form-actions form-group">
<a class="btn btn-secondary btn-md" href="<?php echo $_SERVER['HTTP_REFERER']; ?>">Cancel</a>
<button type="submit" class="btn btn-success btn-md">Submit</button>
</div>
</div>
</div>
</form>
在屏幕上(URL:/users/{{$anyUserId}}/edit):
此外,当我访问 destroy 路由时,它会到达正确的控制器方法“destroy”,甚至会正确重定向,并显示方法中指定的成功消息,但资源不会从数据库中删除。在这两种情况下,在我看来,它都没有找到在这些方法中作为参数注入的资源。
有线索吗?提前致谢!
如果资源名称是users
,路由参数将是user
(单数)。使用资源路由时,路由参数默认为资源名称的单数形式。
要使隐式路由模型绑定起作用,您需要方法的类型提示参数与路由参数相匹配:
public function edit(Users $user)
public function destroy(Users $user)
旁注:模型名称通常是单数,表格是复数。