本文目录导读:

在 Laravel 中,验证成功后路由的命名通常涉及表单提交后的跳转逻辑,以下是几种常见场景的命名和实现方式:
基本表单验证后重定向
// routes/web.php
Route::post('/user/store', [UserController::class, 'store'])->name('user.store');
Route::get('/user/success', [UserController::class, 'success'])->name('user.success');
控制器中:
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users',
'password' => 'required|min:8',
]);
// 创建用户...
User::create($validated);
// 验证成功后重定向
return redirect()->route('user.success')
->with('success', '用户创建成功!');
}
使用表单请求验证
创建 FormRequest:
php artisan make:request StoreUserRequest
// app/Http/Requests/StoreUserRequest.php
class StoreUserRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users',
'password' => 'required|min:8',
];
}
}
控制器中使用:
public function store(StoreUserRequest $request)
{
$validated = $request->validated();
User::create($validated);
return redirect()->route('user.success')
->with('success', '用户创建成功!');
}
带参数的成功路由
// 路由定义
Route::get('/user/{id}/profile', [UserController::class, 'profile'])->name('user.profile');
// 控制器中
public function store(StoreUserRequest $request)
{
$user = User::create($request->validated());
return redirect()->route('user.profile', ['id' => $user->id])
->with('success', '账户创建成功!');
}
使用命名空间分组
Route::prefix('admin')->name('admin.')->group(function () {
Route::post('/users', [AdminUserController::class, 'store'])->name('users.store');
Route::get('/users/success', [AdminUserController::class, 'success'])->name('users.success');
});
完整示例
// routes/web.php
Route::resource('posts', PostController::class)->names([
'create' => 'posts.create',
'store' => 'posts.store',
'show' => 'posts.show',
]);
// PostController.php
class PostController extends Controller
{
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|max:255',
'content' => 'required',
'category_id' => 'required|exists:categories,id',
]);
$post = auth()->user()->posts()->create($validated);
return redirect()
->route('posts.show', $post->id)
->with('success', '文章发布成功!');
}
}
验证失败自定义重定向
// 在 FormRequest 中
public function failedValidation(Validator $validator)
{
throw new ValidationException($validator, response()->json([
'message' => '验证失败',
'errors' => $validator->errors()
], 422));
// 或者重定向到自定义页面
// throw new ValidationException($validator,
// redirect()->route('error.page')->withErrors($validator)
// );
}
最佳实践命名规范:
- 资源路由:使用
resource自动生成的命名 - 操作+资源:
{资源}.{操作}格式,如users.store - 业务场景:
{模块}.{功能}.{动作},如admin.posts.store - 状态命名:
{资源}.{状态},如payment.success
路由命名建议:
- 验证前的路由:
{场景}.verify或{场景}.confirm - 验证后的成功路由:
{场景}.success或{场景}.completed - 验证失败的路由:
{场景}.failed或{场景}.error
保持命名一致性和可读性很重要,建议在项目中使用统一的命名规范。