当前位置:首页 > CMS教程 > 其它CMS > 列表

Laravel高效开发全攻略:从路由定义到控制器编写【详解】

发布:smiling 来源: PHP粉丝网  添加日期:2026-07-01 17:44:03 浏览: 评论:0 

Laravel路由应在routes/web.php中用Route::get()、Route::post()定义,Web与API路由须分离,参数名须与控制器类型提示严格一致,避免盲目使用Route::resource(),命名路由和参数约束可提升可维护性。

直接在 routes/web.php 里用 Route::get()、Route::post() 定义路由,再配好控制器方法签名和参数名,基本就跑通了。关键不是写得多,而是写得准——尤其别混用 API 和 Web 路由,也别让参数名和类型提示对不上。

Web 路由和 API 路由必须分开

绝大多数面向浏览器的页面请求,都该写在 routes/web.php 里。Laravel 已默认为这个文件里的所有路由自动套上 web 中间件组(含 session、CSRF、加密等),开箱即用。

写 Route::post('/login', [...]) 在 web.php 中 → 自动校验 CSRF token,安全可靠

若误写进 api.php → 没有 CSRF 防护,但反而会因 token 缺失报 TokenMismatchException

API 接口统一走 routes/api.php,它默认启用 api 中间件组(无 session、无 CSRF),适合前后端分离或移动端调用

路由参数与控制器方法要严格对应

Laravel 的隐式模型绑定不是“猜”,而是靠名字完全匹配触发的。比如:

路由写 Route::get('/user/{user}', [UserController::class, 'show'])

控制器方法必须是 public function show(User $user) —— 参数变量名 $user 和路由占位符 {user} 必须一模一样(小写、单数、无下划线)

写成 {userId} 或 {User} 或 $id,绑定就失效,$user 会是空字符串或直接 404

如需按 slug 查找,在模型中加 public function getRouteKeyName() 并返回 'slug'

别盲目用 Route::resource(),按需注册才高效

Route::resource('photos', PhotoController::class) 会一口气注册 7 个 REST 动作,但实际项目中往往只用其中两三个。

后台列表页只需 index 和 show?那就加 ->only(['index', 'show'])

不想暴露未实现的 create 或 edit 页面?用 ->except(['create', 'edit'])

自定义路由别名更清晰:->names(['index' => 'photos.list']),避免和默认名冲突

嵌套路由如 /posts/{post}/comments,不要嵌套 resource(),先定义父资源,再单独声明子路由

命名路由 + 类型约束,提升可维护性

给路由起名、加约束,看似多一步,实则省去大量后期排查成本。

用 ->name('user.profile') 后,视图里写 {{ route('user.profile', ['user' => 123]) }},改路径也不用满代码库搜 URL

数字 ID 必须是整数?加 ->whereNumber('id');slug 只能是字母数字横线?用 ->where('slug', '[a-z0-9\-]+')

可选参数写法:/user/{id?},控制器方法参数带默认值:function ($id = 1)

路由缓存后记得运行 php artisan route:clear 或 php artisan route:cache,否则改了不生效。

Tags: Laravel开发全攻略 Laravel控制器编写

分享到: