在 Laravel 中,路由是将 HTTP 请求映射到相应的控制器动作或闭包函数的机制,它负责处理客户端的请求并返回相应的响应。以下是关于 Laravel 路由的详细理解以及不同场景下的代码示例。
Laravel 支持多种 HTTP 请求方法,如 GET
、POST
、PUT
、DELETE
等,并且可以将路由绑定到控制器方法或者直接使用闭包函数来处理请求。
Laravel 的路由定义文件通常位于 routes
目录下,常见的有:
web.php
:主要用于处理 Web 界面相关的路由,默认包含了 web
中间件组,支持会话、CSRF 保护等功能。
api.php
:用于定义 API 相关的路由,默认包含了 api
中间件组,有速率限制等功能。
// 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.';
}
});
// 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.';
});
为路由命名可以方便在代码中引用该路由,使用 name
方法进行命名。
// routes/web.php
use Illuminate\Support\Facades\Route;
Route::get('/dashboard', function () {
return 'Welcome to the dashboard!';
})->name('dashboard');
// 在代码中使用命名路由生成 URL
$url = route('dashboard');
当有多个路由具有相同的前缀、中间件或命名空间时,可以使用路由分组来简化代码。
// 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';
});
});
通常在实际项目中,会将路由绑定到控制器的方法上,以提高代码的可维护性。
首先,创建一个控制器:
// 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']);
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 路由的常见用法和示例,通过合理使用路由,可以清晰地组织应用的请求处理逻辑。