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控制器编写
- 上一篇:Laravel如何利用多进程模型提升并发利用率【优化】
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)
