【问题标题】:Need help in creating a user in Laravel with roles在 Laravel 中创建具有角色的用户时需要帮助
【发布时间】:2020-12-11 18:17:10
【问题描述】:

我遵循了一个很好的教程,介绍了如何创建角色以及如何在 Laravel 中使用门。

我可以为用户添加角色并对其进行编辑,但我希望能够创建一个用户并为他/她提供一个或多个角色,但我不知道从哪里开始(我不是专业人士,但我需要完成这个应用程序)。

这是到目前为止我可以向您展示的所有代码:

用户控制器:

public function edit(User $user, $id)
{
    $user = User::findOrFail($id);
    $roles = Role::all();

    return view('admin.users.edit',compact('user', 'roles'));
}

/**
 * Update the specified resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \App\User  $user
 * @return \Illuminate\Http\Response
 */
public function update(Request $request, User $user, $id)
{
    $user = User::findOrFail($id);
    $user->roles()->sync($request->roles);

    $user->name = $request->name;
    $user->email = $request->email;

    $user->save();

    return redirect()->route('admin.utilisateurs.index');
}

角色表:

public function up()
{
    Schema::create('roles', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->timestamps();
    });
}

数据透视表:

public function up()
{
    Schema::create('role_user', function (Blueprint $table) {
        $table->id();
        $table->BigInteger('role_id')->unsigned()->onDelete('cascade');
        $table->BigInteger('user_id')->unsigned()->onDelete('cascade');
        $table->timestamps();
    });
}

使用复选框编辑刀片文件:

<div class="block-content">
    <div class="form-group">
        @foreach ($roles as $role)
            <div class="form-group form-check">
                <input type="checkbox" class="form-check-input" name="roles[]"
                    value="{{ $role->id }}" id="{{ $role->id }}" 
                    @if ($user->roles->pluck('id')->contains($role->id)) checked @endif>
                <label class="" for="{{ $role->id }}">{{ $role->name }}</label>
            </div>
        @endforeach
    </div>
</div>

问题是我真的不知道如何在 Create Blade File 上编写代码。

这是控制器上的create方法(不确定是否正确):

public function store(Request $request, User $user)
{
    $user = new User();

    $user->roles()->sync($request->roles);

    $user->name = $request->name;
    $user->email = $request->email;

    $user->save();

    return redirect()->route('admin.utilisateurs.index')->with('success','Utilisateur ajouté');
}

感谢您阅读这条长消息!

和平

【问题讨论】:

    标签: php laravel eloquent pivot-table


    【解决方案1】:

    在创建刀片时它几乎与编辑刀片相同。您只需要检查现有角色。

    //rest of the form first like user name and email
    <div class="block-content">
        <div class="form-group">
            @foreach ($roles as $role)
                <div class="form-group form-check">
                    <input type="checkbox" class="form-check-input" name="roles[]" value="{{ $role->id }}" id="{{ $role->id }}">
                    <label class="" for="{{ $role->id }}">{{ $role->name }}</label>
                </div>
            @endforeach
        </div>
    </div>
    

    然后在控制器中而不是 sync 只需使用 attach

    public function store(Request $request)
    {
        $user = new User();
        $user->name = $request->name;
        $user->email = $request->email;
    
        $user->save();
        $user->roles()->attach($request->roles);
    
        return redirect()->route('admin.utilisateurs.index')->with('success','Utilisateurajouté');
    }
    

    看我已经删除了 store 函数中的模型绑定。这里没有必要。并在保存用户后附加角色。 attachsync 上的文档 here

    【讨论】:

      猜你喜欢
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      相关资源
      最近更新 更多