Как назначить роль (и) из регистрационной формы новому пользователю в RegisterController в Laravel 7? - PullRequest
0 голосов
/ 15 апреля 2020

Описание

Я новичок в PHP / Laravel и настроил небольшое управление пользователями / ролями. Мне нужно только зарегистрироваться и войти в систему. Функция «регистрация» доступна только для администратора. Я использовал стандартную настройку аутентификации, как описано здесь в Laravel документах .

. В настоящий момент каждый новый пользователь получает роль "ученик", как вы можете видеть в этом фрагменте:

 protected function create(array $data)
  {

    $user = User::create([
      'name' => $data['name'],
      'password' => Hash::make($data['password']),
    ]);

    // every new user gets the role "student"

    $role = Role::select("id")->where("role", "student")->first();

    $user->roles()->attach($role);

    return $user;
  }

То есть соответствующий блейд для формы создания пользователя:

<h2>Benutzer Erstellen</h2>
<form method="POST" action="{{ route('register') }}" class="form-container">
  @csrf

  <h3>Neuen Benutzer anlegen</h3>
  {{-- <h4>Benutzerrechte:</h4>
  <div class="row-container">
  <div class="row-grid">

    <label for="name">{{ __('Login Name:') }}</label>

    <input id="name" type="text" class="edit-input @error('name') is-invalid @enderror" name="name"
      value="{{ old('name') }}" required autocomplete="name" autofocus placeholder="Name">

    @error('name')
    <span class="invalid-feedback" role="alert">
      <strong>{{ $message }}</strong>
    </span>
    @enderror

  </div>

  <div class="row-grid">

    <label for="password">{{ __('Passwort:') }}</label>

    <input id="password" type="password" class="edit-input @error('password') is-invalid @enderror" name="password"
      required autocomplete="new-password" placeholder="Passwort">

    @error('password')
    <span class="invalid-feedback" role="alert">
      <strong>{{ $message }}</strong>
    </span>
    @enderror


  </div>
  <div class="row-grid">
    <label for="password-confirm">{{ __('Passwort wiederholen:') }}</label>
    <input id="password-confirm" type="password" class="edit-input" name="password_confirmation" required
      autocomplete="new-password" placeholder="Passwort wiederholen">

  </div>
  <div class="form-bottom"><a class="abort-btn" href="{{route("admin.users.index")}}">Abbrechen</a>
    <button class="action-btn" type="submit">Nutzer anlegen</button>
  </div>
</form>

Цель

Я хочу реализовать динамически созданные флажки с возможные роли, так что администратор может назначить роли, создав пользователя. Я попробовал это так:

<div class="row-container">
    @foreach ($roles as $role)

<input type="checkbox" name="roles[]" value="{{ $role->id}}">
  {{Form::label("body", $role->role)}}
  @endforeach
  </div>

Вопросы

  1. Так как же можно установить один из флажков по умолчанию?

  2. А как должен выглядеть код в RegisterController для получения значений из флажков и связывания ролей с пользователем?

Редактировать

Ответ на второй вопрос:

В RegisterController Заменить:

$role = Role::select("id")->where("role", "student")->first();

$user->roles()->attach($role);

на:

$user->roles()->attach($data['roles']);

Найдено на эта Laravel новостная статья .

Вы можете найти весь репо здесь .

Заранее спасибо за ваше время:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...