Я выполняю роли и разрешения - действие, которое администратор может изменить user на staff. Я могу отправить id функции editRolePermission, но значение роли.

    function editRolePermission($id, "role value here")
    {

        $row = DB::table('users')
                ->where('id',$id)
                ->limit(1)
                ->update(array('role' => ''));
        return redirect()->back();
    }
<form action="{{ route('updateRolePermission', $user->id) }}" method="POST">

    @method('PATCH')
    @csrf

    <select name="roles">
    <option name ="user" value="user">User</option>
    <option name= "staff" value="staff">Staff</option>
    </select>
    <input type="submit" onchange="this.form.submit()">
</form>
Route::patch('edit-role-permission/{id}', [AdminController::class, 'editRolePermission'])->name('updateRolePermission');
0
陳宇亘 27 Ноя 2021 в 16:04
Вы получаете его от Request. Или, возможно, создайте запрос формы
 – 
brombeer
27 Ноя 2021 в 16:21

1 ответ

Лучший ответ

Следующее должно делать то, что вы хотите. Вот маршрут - обратите внимание, я заменил {id} на {user} - это идентификатор пользователя, для которого нам нужно изменить роль:

Route::post("/edit-role-permission/{user}", [AdminController::class, "editRolePermission"]);

Как реализовать маршрут в вашей форме:

@if(session()->has("message"))
    {{ session("message") }}
@endif

<form action="/edit-role-permission/{{ $user->id }}" method="POST">
    @csrf

    <select name="roles">
        <!-- ... options ... -->
    </select>

    <!-- submit button -->
</form>

Благодаря магии Laravel передача идентификатора пользователя в качестве второго параметра позволяет нам получить доступ к модели пользователя, чтобы мы могли легко обновлять пользователя с гораздо меньшим количеством кода. Мы можем использовать запрос для получения любых опубликованных значений, в этом случае $request->roles относится к входу с именем roles:

public function editRolePermission(Request $request, \App\Models\User $user)
{
    $user->update(["role" => $request->roles]);
    $user->save();

    return redirect()->back()->with("message", "User role updated successfully");
}
0
DannyXCII 27 Ноя 2021 в 16:43
Спасибо, но 404, когда кнопка нажата, похоже, не запускает функцию editRolePermission.
 – 
陳宇亘
27 Ноя 2021 в 16:33
См. мои правки - измените маршрут патча на маршрут сообщения. Я добавил сообщение, возвращаемое контроллером, и способ отображения сообщения в форме, чтобы вы могли увидеть, как оно работает.
 – 
DannyXCII
27 Ноя 2021 в 16:44
DannyXCII, большое вам спасибо !!. Я работал над этим много часов T.T.
 – 
陳宇亘
27 Ноя 2021 в 16:52