如何在 laravel 身份验证期间附加到用户创建多个复选框

Posted

技术标签:

【中文标题】如何在 laravel 身份验证期间附加到用户创建多个复选框【英文标题】:How to attach to User create multiple checkboxes during laravel authentication 【发布时间】:2021-05-30 06:17:54 【问题描述】:

大家下午好!

在我的项目中,我必须直接在用户的注册中创建一个新用户,该用户将是一家餐厅。

注册后,我可以将更多类型的餐厅与登录的用户相关联。

我已经进行了迁移和关系,一切正常。 这是我写的允许登录用户(餐厅)添加更多类型。

public function typologyAdd() 
  $typologies = Typology::all();
  return view('pages.typology-add',compact('typologies'));

public function typologyStore(Request $request) 
 $data = $request -> all();
 $user = Auth::user();
 $typologies = Typology::findOrFail($data['typologies']);
 $user -> typologies() -> sync($typologies);
 return redirect() -> route('home');

所以这只有在我注册用户后才有效。 我想在注册页面时输入这个逻辑。

我试图修改 RegisterController 但我不知道该怎么做:

protected function validator(array $data)

    return Validator::make($data, [
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'indirizzo' => ['required' ,'string','max:255'],
        'piva' => ['required','string','min:11','max:11','digits:11','unique:users'],
        'password' => ['required', 'string', 'min:8', 'confirmed'],
    ]);


/**
 * Create a new user instance after a valid registration.
 *
 * @param  array  $data
 * @return \App\User
 */
protected function create(array $data)

    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'indirizzo' => $data['indirizzo'],
        'piva' => $data['piva'],
        'password' => Hash::make($data['password']),
    ]);

并将复选框放在 Register.blade.php

  <div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">

                @if ($errors->any())
                  <div class="alert alert-danger">
                     <ul>
                         @foreach ($errors->all() as $error)
                             <li> $error </li>
                         @endforeach
                     </ul>
                  </div>
                @endif

                <div class="card-header"> __('Register') </div>

                <div class="card-body">
                    <form method="POST" action=" route('register') ">
                        @csrf

                        <div class="form-group row">
                            <label for="name" class="col-md-4 col-form-label text-md-right"> __('Name') </label>

                            <div class="col-md-6">
                                <input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value=" old('name') " required autocomplete="name" autofocus>

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

                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right"> __('E-Mail Address') </label>

                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value=" old('email') " required autocomplete="email">

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

                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right"> __('Password') </label>

                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">

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

                        <div class="form-group row">
                            <label for="password-confirm" class="col-md-4 col-form-label text-md-right"> __('Confirm Password') </label>

                            <div class="col-md-6">
                                <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="indirizzo" class="col-md-4 col-form-label text-md-right"> __('indirizzo') </label>

                            <div class="col-md-6">
                              <input id="indirizzo" type="text" class="form-control" name="indirizzo" value=" old('indirizzo') " maxlength="255" required>

                              @error('indirizzo')
                                  <span class="invalid-feedback" role="alert">
                                      <strong> $message </strong>
                                  </span>
                              @enderror
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="piva" minlenght="11" maxlength="11" class="col-md-4 col-form-label text-md-right"> __('piva') </label>

                            <div class="col-md-6">
                              <input id="piva" type="text" class="form-control @error('piva') is-invalid @enderror" name="piva" value=" old('piva') " required>

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

                        </div>

                        <div class="form-group row mb-0">
                            <div class="col-md-6 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                     __('Register') 
                                </button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>

希望有人能给我一些关于如何做的想法,感谢那些阅读和回答的人

【问题讨论】:

【参考方案1】:

RegisterController.php 中,您可以通过执行以下操作来获取新创建的用户。

protected function create(array $data)

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

    // Do actions on $user and finally return $user
 
    return $user;

如果您需要任何验证规则,并且如果您正在执行关系数据输入,我建议您执行基于 SQL 事务的插入。如果没有抛出 SQL 错误,则提交数据。否则回滚更改以防止出现问题。

【讨论】:

感谢您的回答!!我正在考虑这样做,但我需要在注册页面中显示我已经在表类型中的所有类型,当然当我尝试在注册刀片中“foreach它们”时,它无法识别变量 $typologies。我试图理解为什么。 确保将变量传递给视图。视图不识别变量意味着变量首先没有传递到视图中。您可能需要覆盖负责为此生成注册表单的控制器功能。完成后,您将能够访问新的输入变量,无论是复选框还是单选按钮或其他东西。是否需要验证并在 $user 对象上方执行关系数据输入。

以上是关于如何在 laravel 身份验证期间附加到用户创建多个复选框的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 用户未通过身份验证时如何重定向到所需页面

有没有办法在没有数据库的情况下使用 laravel 4.2 身份验证?

如何在 laravel 中进行前端 api 身份验证

如何在 Laravel 和 Vue.js 中使用 jwt-auth 检查用户是不是经过身份验证

如何进行多个身份验证:laravel 中的用户、管理员、卖家 [关闭]

如何在身份服务器 4/身份验证代码流中请求访问令牌的附加声明?