Laravel : 如何创建自定义寄存器

Laravel : How to create custom Register

我有 2 个注册和登录表单。一个用于用户,另一个用于管理员角色。 在用户角色中,我使用 from laravel 身份验证,效果很好并且运行良好。 但是,问题是当我从管理员角色创建自定义寄存器时,它不能正常工作。 它无法存储到数据库,当我使用 echo 函数检查时,它不会打印任何内容,只是刷新页面。

你能帮帮我吗,怎么了???

    namespace App\Http\Controllers\Admin\Auth;
    use App\Http\Controllers\Controller;
    use App\Providers\RouteServiceProvider;
    use App\User;
    use Illuminate\Foundation\Auth\RegistersUsers;
    use Illuminate\Support\Facades\Hash;
    use Illuminate\Support\Facades\Validator;
    use Illuminate\Http\Request;
    
    class AregisterController extends Controller
    {
       
        use RegistersUsers;
       
        public function __construct()
        {
           // $this->middleware('guest');
        }
    
       
        public function create(Request $request)
        {
            
            $this->validate(request(),[
                'name' => ['required', 'string', 'max:255'],
                'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
                'password' => ['required', 'string', 'min:8', 'confirmed'],
            ]);
         
            if ($request('confirmpassword') == $request('password')){
                $user = User::create(request(['name','email' ,'password','is_admin' => True, ]));
              //  return redirect()->route('admin-login')->with('status', 'Successfully create account');;
            }
            else {
                
                return redirect()->route('admin-reg')->with('status', 'Confirm Password not match');;
            }
        }
    }

在这个控制器中,首先我要检查密码将确认密码然后将其存储到数据库中。

<form action ="{{ route('user-create') }}" method="POST" enctype="multipart/form-data" >
                                        <input type = "hidden" name = "_token" value = "<?php echo csrf_token(); ?>">
                                            <div class="row mb-3">
                                                <div class="col-md-12">
                                                    <div class="form-floating mb-2 mb-md-0">
                                                        <input class="form-control" id="inputFirstName" type="text" placeholder="Enter your first name" name="name" />
                                                        <label for="inputFirstName">Name </label>
                                                    </div>
                                                </div>
                                            </div>
                                            <div class="form-floating mb-3">
                                                <input class="form-control" id="inputEmail" type="email" placeholder="name@example.com" name="email"/>
                                                <label for="inputEmail">Email address</label>
                                            </div>
                                            <div class="row mb-3">
                                                <div class="col-md-6">
                                                    <div class="form-floating mb-3 mb-md-0">
                                                        <input class="form-control" id="inputPassword" type="password" placeholder="Create a password" name="password" />
                                                        <label for="inputPassword">Password</label>
                                                    </div>
                                                </div>
                                                <div class="col-md-6">
                                                    <div class="form-floating mb-3 mb-md-0">
                                                        <input class="form-control" id="inputPasswordConfirm" type="password" placeholder="Confirm password" name="confirmpassword" />
                                                        <label for="inputPasswordConfirm">Confirm Password</label>
                                                    </div>
                                                </div>
                                            </div>
                                            <div class="mt-4 mb-0">
                                                <div class="d-grid"><button type="submit" class="btn btn-primary">Create account</button></div>
                                            </div>
                                        </form>
                  

您对如何修复它有什么建议吗?它不能在数据库中存储任何东西,当我使用“echo”检查它时,什么也没有:) 谢谢

confirmed 规则正在查找字段名称 {field}_confirmation。因此,如果您尝试确认 'password' 输入,它将查找名为 password_confirmation 的字段。因此需要将表单中的输入更改为名称 password_confirmation.

您不需要比较提交的 2 个密码字段,因为 confirmed 规则已经为您完成了(这就是它的目的;确认它们匹配)。

请求 class 不可调用,$request(...)。这将引发错误,因为它不可调用(没有定义 __invoke 方法使其可调用)。

要创建用户,您可以使用 only 方法轻松获取所需的字段:

$request->only('name', 'email', 'password')

您可以将 is_admin 值添加到从 only 调用返回的数组中:

User::create($request->only('name', 'email', 'password') + ['is_admin' => true])

您必须确保 is_admin 字段在模型上是“可填写的”。

通常,您不需要在此方法中的任何地方调用 request(),因为您已经将 Request 实例注入为 $request

此外,您的表单不处理文件上传,因此您不需要 enctype="multipart/form-data"