Laravel : 如何创建自定义寄存器
Laravel : How to create custom Register
我有 2 个注册和登录表单。一个用于用户,另一个用于管理员角色。
在用户角色中,我使用 from laravel 身份验证,效果很好并且运行良好。
但是,问题是当我从管理员角色创建自定义寄存器时,它不能正常工作。
它无法存储到数据库,当我使用 echo
函数检查时,它不会打印任何内容,只是刷新页面。
你能帮帮我吗,怎么了???
这是我的路线
Route::get('/adminregister', 'Auth\LoginController@formreg')->name('admin-reg');
这是我的控制器
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"
。
我有 2 个注册和登录表单。一个用于用户,另一个用于管理员角色。
在用户角色中,我使用 from laravel 身份验证,效果很好并且运行良好。
但是,问题是当我从管理员角色创建自定义寄存器时,它不能正常工作。
它无法存储到数据库,当我使用 echo
函数检查时,它不会打印任何内容,只是刷新页面。
你能帮帮我吗,怎么了???
这是我的路线
Route::get('/adminregister', 'Auth\LoginController@formreg')->name('admin-reg');
这是我的控制器
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"
。