首页 > PHP > Laravel 路由

Laravel 路由

2025-02-05 13:09:52
在 Laravel 中,路由是将 HTTP 请求映射到相应的控制器动作或闭包函数的机制,它负责处理客户端的请求并返回相应的响应。以下是关于 Laravel 路由的详细理解以及不同场景下的代码示例。

基本路由概念

Laravel 支持多种 HTTP 请求方法,如 GETPOSTPUTDELETE 等,并且可以将路由绑定到控制器方法或者直接使用闭包函数来处理请求。

路由文件位置

Laravel 的路由定义文件通常位于 routes 目录下,常见的有:
  • web.php:主要用于处理 Web 界面相关的路由,默认包含了 web 中间件组,支持会话、CSRF 保护等功能。
  • api.php:用于定义 API 相关的路由,默认包含了 api 中间件组,有速率限制等功能。

基本路由示例

1. 简单的 GET 路由

// routes/web.php

use Illuminate\Support\Facades\Route;

// 定义一个简单的 GET 路由,当访问 / 时返回 "Hello, Laravel!"
Route::get('/', function () {
    return 'Hello, Laravel!';
});

// 定义一个带参数的 GET 路由,参数使用 {} 包裹
Route::get('/user/{id}', function ($id) {
    return 'User ID: '. $id;
});

// 定义一个带可选参数的 GET 路由,使用 ? 标记参数为可选
Route::get('/post/{id?}', function ($id = null) {
    if ($id) {
        return 'Post ID: '. $id;
    } else {
        return 'No post ID provided.';
    }
});

2. 其他 HTTP 方法的路由

// routes/web.php

use Illuminate\Support\Facades\Route;

// POST 路由,用于处理表单提交等操作
Route::post('/submit', function () {
    return 'Form submitted successfully!';
});

// PUT 路由,通常用于更新资源
Route::put('/update/{id}', function ($id) {
    return 'Resource with ID '. $id. ' updated.';
});

// DELETE 路由,用于删除资源
Route::delete('/delete/{id}', function ($id) {
    return 'Resource with ID '. $id. ' deleted.';
});

3. 路由命名

为路由命名可以方便在代码中引用该路由,使用 name 方法进行命名。
 
// routes/web.php

use Illuminate\Support\Facades\Route;

Route::get('/dashboard', function () {
    return 'Welcome to the dashboard!';
})->name('dashboard');

// 在代码中使用命名路由生成 URL
$url = route('dashboard');

4. 路由分组

当有多个路由具有相同的前缀、中间件或命名空间时,可以使用路由分组来简化代码。
 
 
 
// routes/web.php

use Illuminate\Support\Facades\Route;

// 带有前缀的路由分组
Route::prefix('admin')->group(function () {
    Route::get('/users', function () {
        return 'Admin users list';
    });

    Route::get('/settings', function () {
        return 'Admin settings page';
    });
});

// 带有中间件的路由分组
Route::middleware('auth')->group(function () {
    Route::get('/profile', function () {
        return 'User profile page';
    });
});

5. 路由绑定到控制器

通常在实际项目中,会将路由绑定到控制器的方法上,以提高代码的可维护性。
首先,创建一个控制器:
 
 
 
// app/Http/Controllers/UserController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    public function index()
    {
        return 'User list';
    }

    public function show($id)
    {
        return 'User with ID '. $id;
    }
}

 

然后在路由文件中绑定控制器方法:
 
// routes/web.php

use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Route;

// 绑定到控制器的 index 方法
Route::get('/users', [UserController::class, 'index']);

// 绑定到控制器的 show 方法
Route::get('/users/{id}', [UserController::class, 'show']);

6. API 路由示例

routes/api.php 文件主要用于定义 API 相关的路由,默认有 api 中间件组,通常还会有版本号前缀。
 
 
// routes/api.php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

// 定义一个简单的 API 路由
Route::get('/products', function () {
    return ['product1', 'product2', 'product3'];
});

 

以上就是 Laravel 路由的常见用法和示例,通过合理使用路由,可以清晰地组织应用的请求处理逻辑。
使用 Ctrl+D 可将网站添加到书签
收藏网站
扫描二维码
关注早实习微信公众号
官方公众号
Top