Laravel路由怎么定义_Laravel基本路由注册方法【教程】

2次阅读

路由定义在 routes/web.php(Web 请求)或 routes/api.php(API 请求)文件中;控制器不负责注册路由,常见404需先确认路由文件是否匹配请求类型。

Laravel路由怎么定义_Laravel基本路由注册方法【教程】

路由定义在哪个文件里

绝大多数 laravel 项目,路由都写在 routes/web.php(面向 Web 请求)或 routes/api.php(面向 API 请求)。别去 app/http/Controllers 里硬塞路由逻辑——控制器只管处理,不负责注册。

常见错误:改了路由但页面 404,第一反应不是代码错,而是检查当前请求是否走对了路由文件。比如用 postman 测 API 却在 web.php 里写 Route::get(),必然 404 —— web.php 默认带 sessioncsrf 中间件api.php 不带,且前缀默认是 /api

  • web.php 自动应用 web 中间件组(含 session、csrf、加密 cookie
  • api.php 自动应用 api 中间件组(无 session,无 csrf,适合无状态接口
  • 自定义路由文件需手动在 app/Providers/RouteServiceProvider.phpmap() 方法里加载

最简 GET 路由怎么写

不用想太复杂,一个 Route::get() 就能跑起来:

Route::get('/hello', function () {     return 'Hi there'; });

注意三点:

  • 路径字符串开头不加 / 也能工作,但加了更清晰、避免嵌套时出错(比如 Route::prefix('v1') 下的子路由)
  • 闭包函数里不能直接访问 $request,要显式声明:function (IlluminateHttpRequest $request)
  • 返回字符串会自动转成 200 响应;返回数组会自动 jsON 化(仅限 api.php);返回视图要用 view('welcome')

带参数的路由怎么声明和取值

URL 参数分两种:必需的(如 /user/{id})和可选的(如 /user/{id?})。关键不是写法,而是「怎么安全取值」:

  • 必需参数必须在闭包或控制器方法中声明同名变量:Route::get('/post/{slug}', function ($slug) { ... }),否则报 Missing required parameters for [Route: ...]
  • 可选参数需设默认值:function ($slug = 'home'),否则调用时没传会报错
  • 正则约束用 where() 链式调用:->where('id', '[0-9]+'),避免把 /user/abc 错误匹配到 user/{id} 导致后续类型转换失败
  • 中文或特殊字符参数必须做 URL 编码,服务端收到的是解码后值,无需再 urldecode()

为什么 POST 路由总提示 TokenMismatchException

这是 web.php 下最常见的报错,根源不在路由本身,而在 CSRF 防护机制被绕过:

  • 所有非 GET/HEAD/OPTIONS 请求(包括 POST/PUT/delete)默认需要有效的 _token 字段
  • 表单里漏了 @csrf 指令,或 JS 请求没带上 X-CSRF-TOKEN header,就会触发该异常
  • API 路由(api.php)默认不校验 CSRF,所以切记:不要在 api.php 里注册需要 session 或登录态的页面跳转路由
  • 临时关闭 CSRF(仅开发调试):在 app/Http/Middleware/VerifyCsrfToken.php$except 数组里加路径,例如 '/debug/*'

真正难搞的不是写路由,是搞清中间件链在哪一层生效、哪些参数被自动注入、哪些错误其实是中间件抛的而不是路由没匹配上。

text=ZqhQzanResources