跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

Laravel怎么创建控制器_Laravel怎么生成资源控制器【技巧】

php artisan make:controller 默认创建空控制器,位于 app/Http/Controllers,不带方法;资源控制器需手动注册路由,隐式绑定依赖参数名与类型提示一致,且仅对 show/edit/update/destroy 生效。 用
php artisan make:controller
创建普通控制器 默认生成的是空控制器,不带任何方法,适合自定义逻辑。执行命令后会在
app/Http/Controllers
下创建 PHP 文件。 常见错误:运行完命令没加
--invokable
却以为自带
__invoke
方法;或者忘了在路由里绑定,导致 404。 加
-m
参数可同时创建对应模型(但不会自动关联,只是省去手动建模型的步骤) 加
--plain
是冗余的(新版 Laravel 默认就是 plain,不带 CRUD 方法) 如果控制器要放在子目录,比如
Api/V1/UsersController
,命令写成
php artisan make:controller Api/V1/UsersController
,注意斜杠不用转义 类名必须符合 PascalCase,且与文件名严格一致,否则自动加载失败 用
php artisan make:controller --resource
生成资源控制器 这是最常被误用的点:它只生成类文件和七个标准方法(
index
、
create
、
store
等),**不会自动注册路由**。很多人跑完命令就去访问
/posts
,结果 404。 资源控制器本质是代码模板,不是开箱即用的功能模块。 加
--api
会去掉
create
和
edit
这两个返回视图的方法,更适合前后端分离项目 方法命名和 HTTP 动词映射是固定的,不能靠参数改(比如没法让
index
对应 POST),要改就得手动重写路由 如果已有同名控制器,命令会报错,不会覆盖,得先删文件或换名
store
和
update
方法默认用
validate
方法做表单验证,但实际项目中更常用
FormRequest
类,这时得手动替换掉验证逻辑 路由注册时别漏掉
->middleware()
和命名 资源路由用
Route::resource('posts', [PostController::class])
注册后,所有方法默认无中间件。登录态控制、API 认证、权限检查都得显式加。 Laravel 13.2.0 PHP中文网提供Laravel 13.2.0版本下载,Laravel框架 是基于 PHP 8.3+ 的高性能框架,官方推荐通过 Composer 安装。它内置 AI SDK、JSON:API Resources 及原生向量搜索,支持属性驱动开发与队列路由,大幅提升开发效率。相比旧版,13.2.0 优化了缓存 TTL 管理与实时通信,无需 Redis 即可横向扩展。作为现代 Web 开发首选,它兼顾安全与极速体验,助您快速构建企业级应用。 下载 另外,Laravel 的命名路由(如
posts.index
)在跳转和生成 URL 时非常依赖,漏命名会导致
route()
函数报错。 批量加中间件:
->middleware(['auth', 'can:view,App\Models\Post'])
给单个动作加中间件:
->only(['index', 'show'])->middleware('cache.headers')
改命名前缀:
->names('admin.posts')
,这样
route('admin.posts.index')
才能用 如果控制器方法名被改过(比如把
index
改成
listAll
),对应路由会失效,必须用
->actions()
显式映射 资源控制器的「隐式绑定」要小心字段名 当路由定义为
/posts/{post}
,且控制器方法签名是
show(Post $post)
,Laravel 会自动按主键查模型——但前提是路由参数名和类型提示的变量名一致,且模型主键是
id
。 一旦你把主键改成
uuid
或字段叫
post_id
,又没配
getRouteKeyName()
,就会抛出
ModelNotFoundException
。 在模型里加
public function getRouteKeyName() { return 'slug'; }
可切换查找字段 如果路由参数是
{post_slug}
,但类型提示还是
Post $post
,绑定会失败,必须同步改变量名为
$post_slug
资源路由的隐式绑定只对
show
、
edit
、
update
、
destroy
生效,
index
和
create
不走这逻辑 控制器本身不难生成,真正卡住人的永远是路由怎么连、中间件怎么套、绑定字段对不对——这些地方一错,请求根本到不了方法里。

相关文章