【问题标题】:Laravel 7: Read single resource not workingLaravel 7:读取单个资源不起作用
【发布时间】:2020-12-28 09:10:22
【问题描述】:

我是 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>

在屏幕上(网址:/users/{{$anyUserId}}/edit):

此外,当我访问destroy 路由时,它会到达正确的控制器方法“destroy”,甚至正确重定向,并显示方法中指定的成功消息,但资源不会从数据库中删除。在这两种情况下,在我看来,在这些方法中都没有找到作为参数注入的资源。

有什么线索吗?提前谢谢!

【问题讨论】:

    标签: php laravel laravel-7


    【解决方案1】:

    如果资源名称为users,则路由参数将为user(单数)。使用资源路由时,路由参数默认为资源名称的单数形式。

    要使隐式路由模型绑定起作用,您需要方法的类型提示参数以匹配路由参数:

    public function edit(Users $user)
    
    public function destroy(Users $user)
    

    旁注:通常模型名称是单数,它们的表是复数。

    【讨论】:

    • 泰!这是正确的答案。奇怪的是,我记得当我用工匠生成这个控制器时,它创建了这些方法参数为 (User $users) 这是错误的,然后我将其更改为 (Users $users) 使其部分工作,现在我如您所说,更改为 (Users $user) ,它可以正常工作。谢谢!
    猜你喜欢
    • 2020-10-16
    • 2021-11-25
    • 1970-01-01
    • 2015-08-09
    • 2016-04-20
    • 1970-01-01
    • 2019-11-02
    • 2020-12-29
    • 1970-01-01
    相关资源
    最近更新 更多