Laravel 用户编辑

Laravel user edit

我有来自 DB 的用户详细信息,并使用 blade 循环和编辑按钮进行打印。现在我想要,如果我单击按钮,我需要为用户单击的按钮的用户详细信息。

我尝试使用隐藏输入字段 <input type="hidden" value="{{$user->email}}" name="email"> 在我的控制器中,我只打印表单提交中的值。但我只得到最后一个用户。

往下看,希望你能看懂..

<div class="content-wrapper">
    <div class="flex-center position-ref full-height">
        <form action="{!!url('/delete')!!}" method="post"> {!!csrf_field()!!}   
            <div class="table-responsive">
                <table class="table table-hover">
                    <thead>
                      <tr>
                        <th>ID</th>
                        <th>Name</th>
                        <th>Email</th>
                        <th>Role</th>
                      </tr>
                    </thead>
                    <tbody>
                   @foreach($users as $user)
                      <tr>
                        <td>{{$user->id}}</td>
                        <td>{{$user->name}}</td>
                        <td>{{$user->email}}</td>   <input type="hidden" value="{{$user->email}}" name="email">
                        <td>{{$user->role}}</td>
                        <td>
                            <div class="btn-group">
                              <button type="submit" class="btn btn-primary btn-sm" name="edit"  >Edit</button>
                              <button type="submit" class="btn btn-primary btn-sm" name="delete"    >Delete</button>
                              <button type="submit" class="btn btn-primary btn-sm" name="make"  >Make Admin</button>
                            </div>
                        </td>
                      </tr>
                    @endforeach
                </tbody>
                </table>
            </div>  
        </form>     
    </div>
</div>  

我认为那是因为您对所有用户的隐藏字段使用相同的名称 "email"。它正在被覆盖,因为 form is same 。
相反,在循环中添加 form 标记并删除 table.

之前的标记
@foreach($users as $user)
    <form action="{!!url('/delete')!!}" method="post"> {!!csrf_field()!!}
      <tr>
        <td>{{$user->id}}</td>
        <td>{{$user->name}}</td>
        <td>{{$user->email}}</td>   <input type="hidden" value="{{$user->email}}" name="email">
        <td>{{$user->role}}</td>
        <td>
            <div class="btn-group">
              <button type="submit" class="btn btn-primary btn-sm" name="edit"  >Edit</button>
              <button type="submit" class="btn btn-primary btn-sm" name="delete"    >Delete</button>
              <button type="submit" class="btn btn-primary btn-sm" name="make"  >Make Admin</button>
        </div>
        </td>
      </tr>
    </form>
@endforeach

或者,您可以在循环之外放置一个隐藏的电子邮件字段,并在提交前使用 JS 为其分配值。

第 1 步:将数据属性 (data-email) 添加到您的按钮以接收电子邮件。同时添加一个常用的 class 名称来捕捉点击事件。 (见JS部分)

<button type="button" class="test-btn btn btn-primary btn-sm" name="edit"  data-email="{{$user->email}}" >Edit</button>
<button type="button" class="test-btn btn btn-primary btn-sm" name="delete" data-email="{{$user->email}}"  >Delete</button>
<button type="button" class="test-btn btn btn-primary btn-sm" name="make"  data-email="{{$user->email}}" >Make Admin</button>

第 2 步:将 email 隐藏字段移出循环,值为空。

<form action="{!!url('/delete')!!}" method="post" id="test-form"> {!!csrf_field()!!} 
<input type="hidden" value="" name="email" id="email">

第 3 步:添加 JS 以捕获按钮上的点击事件,并将点击按钮的电子邮件的值分配给电子邮件文本字段。

$(".test-btn ").on("click",function(e){
    //assign the email value from button to variable
    email = $(this).attr(data-email);

    //assign the email value to email hidden field
    $("#email").value(email);

    //submit the form
    $("#test-form").submit();
});

假设您希望在单击编辑按钮时转到包含用户详细信息的编辑页面。

<a href="{{ route('your_route_name',$user->id) }}" class="test-btn btn btn-primary btn-sm">Edit</a>