【问题标题】:Laravel 5.4 change user roleLaravel 5.4 更改用户角色
【发布时间】:2017-08-10 09:33:09
【问题描述】:

我尝试在面板管理员中更改角色。但是当我制作它时,我的表格不发送帖子请求。现在只显示用户角色。我无法修复它,因为当我单击按钮切换时我没有收到任何错误并且角色没有改变。

当我使用 url /admin/change 时,我使用 HttpRequester 显示此错误: RouteCollection.php 第 233 行中的 MethodNotAllowedHttpException

这是我的代码:

查看:

@extends('layouts.app')
@section('content')
<h2>Panel Admina</h2>
<div class="panel-group">
	<div class="panel panel-default">
	  <div class="panel-body">
	 	<table class="table">
	   <thead>
	   <tr>
	    <th>Id</th>
      <th>Imię</th>
      <th>Nazwisko </th>
      <th>E-mail </th>
      <th>Nr.tele </th>
      <th>Użytkownik </th>
      <th>Moderator </th>
      <th>Admin </th>
</tr>	
</thead>
<tbody>
@foreach($users as $user)
  <tr>
    <form action="{{route('change')}}" method="post">

                {{ csrf_field() }}
      <td>{{ $user->id }}</td>
      <td>{{ $user->name }}</td>
      <td>{{ $user->lastname }}</td>
      <td>{{ $user->email }}<input type="hidden" name="email" value="{{ $user->email }}"></td>
      <td>{{ $user->phonenumber }}</td>
      <td><input type="checkbox" {{ $user->hasRole('User') ? 'checked' : '' }} name="role_user"/></td>
      <td><input type="checkbox" {{ $user->hasRole('Moderator') ? 'checked' : '' }} name="role_moderator"/></td>
      <td><input type="checkbox" {{ $user->hasRole('Admin') ? 'checked' : '' }} name="role_admin"/></td>
      <td><input type="submit" class="btn btn-default btn-sm" value="Przydziel rolę"></td>


    </form>
  </tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>

@endsection

控制器:

  public function change(Request $request)
    {
        $user = User::where('email', $request['email'])->first();

        $user->roles()->detach();

        if ($request['role_user']) {
            $user->roles()->attach(Role::where('name', 'User')->first());
        }
        if ($request['role_moderator']) {
            $user->roles()->attach(Role::where('name', 'Moderator')->first());
        }
        if ($request['role_admin']) {
            $user->roles()->attach(Role::where('name', 'Admin')->first());
        }
        return redirect()->back();
    }

路由:

Route::get('/admin', [
        'uses' => 'AdminController@index',
        'middleware' => 'roles',
        'roles' => ['Admin']
    ]);

Route::post('/admin/change', [
    'uses' => 'AdminController@change',
    'as' => 'change',
    'middleware' => 'roles',
    'roles' => ['Admin']
]);

我真的不知道如何解决我的问题。

【问题讨论】:

  • 在你的路由中尝试删除middlewarerule,看看是否会导致问题
  • 我这样做了,还是一样
  • 请尽量把post Route放在get one之前

标签: php laravel


【解决方案1】:

尝试将用户 ID 传递给您的路线和表单操作,而不是发布,例如:

<form action="{{route('change', $user->id)}}" method="post">

在你的路线上:

Route::put('/admin/change/{id}', [
    'uses' => 'AdminController@change',
    'as' => 'change',
    'middleware' => 'roles',
    'roles' => ['Admin']
]);

在你的控制器中:

public function change(Request $request, $id)

【讨论】:

  • 仍然无法正常工作;/我认为这不是必需的,因为我使用隐藏的电子邮件及其设置的唯一性
  • github.com/K3n0s/szpital/tree/paneladmina 也许这样会更好,这个项目可以链接到我的 github
  • 如果您尝试通过键入 'localhost:8000/admin/change' 转到 url,它会给您错误。它应该通过使用表单的 http 请求发生。我在您的代码中注意到的另一件事是,您的 from 没有提交任何数据,但是当我删除表格 html 代码时,表单已正确提交。
  • ye 它的工作非常棒;p 我必须弄清楚如何展示它;p
猜你喜欢
  • 2017-09-16
  • 2017-10-12
  • 2018-11-04
  • 2021-08-22
  • 2021-12-06
  • 2017-11-10
  • 1970-01-01
  • 2012-08-23
  • 2017-12-07
相关资源
最近更新 更多