Laravel验证成功后路由怎么命名

wen PHP项目 4

本文目录导读:

Laravel验证成功后路由怎么命名

  1. 基本表单验证后重定向
  2. 使用表单请求验证
  3. 带参数的成功路由
  4. 使用命名空间分组
  5. 完整示例
  6. 验证失败自定义重定向
  7. 最佳实践命名规范:

在 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)
    // );
}

最佳实践命名规范:

  1. 资源路由:使用 resource 自动生成的命名
  2. 操作+资源{资源}.{操作} 格式,如 users.store
  3. 业务场景{模块}.{功能}.{动作},如 admin.posts.store
  4. 状态命名{资源}.{状态},如 payment.success

路由命名建议:

  • 验证前的路由:{场景}.verify{场景}.confirm
  • 验证后的成功路由:{场景}.success{场景}.completed
  • 验证失败的路由:{场景}.failed{场景}.error

保持命名一致性和可读性很重要,建议在项目中使用统一的命名规范。

抱歉,评论功能暂时关闭!