首先,需要了解一下Laravel 9的新特性,它的认证(auth)系统已经进行了重写,现在使用AJAX来进行认证,这意味着我们需要相应地更改我们的代码来实现这些变化。
对于register()函数的问题,它已经被重命名为create(),现在负责处理新用户的创建。接下来的示例代码将展示如何实现这个更改:
首先,我们需要在我们的routes/web.php文件中创建一个新的路由来处理用户注册:
Route::post('/register', 'RegisterController@create')->name('register');
然后,我们需要在app/Http/Controllers/Auth目录下创建一个新的控制器RegisterController.php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use App\Models\User;
use Illuminate\Auth\Events\Registered;
class RegisterController extends Controller
{
public function create(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', Rule::unique('users')],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
if ($validator->fails()) {
return response()->json([
'status' => 'error',
'message' => $validator->errors()->first(),
], 422);
}
event(new Registered($user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password),
])));
return response()->json([
'status' => 'success',
'message' => 'User registered successfully.',
]);
}
}
最后,在我们的视图文件中,我们将通过AJAX来提交注册表单的数据:
$('#registerForm').submit(function(e) {
e.preventDefault();
var form = $(this);
$.ajax({
url: form.attr('action'),
type: 'post',
dataType: 'json',
data: form.serialize(),
success: function(response) {
if (response.status == 'success') {
// Show success message
} else {
// Show error message
}