mcpField
B
bagisto-coding-standards

bagisto-coding-standards

github.com/bagisto开发13145 次安装2 周前更新
代码仓库

关于 bagisto-coding-standards

为 Bagisto 项目提供统一编码规范的技能,面向编写和审查代码的开发者。内容覆盖 PHP、Laravel、数据库、安全、Blade 和本地化规则,并指出何时查阅详细规范。

主要功能

  1. 01PHP 成员顺序与文档块规范
  2. 02数据库访问与多数据库兼容规则
  3. 03Laravel 事件与框架约定
  4. 04Blade 模板与格式规则
  5. 05安全授权与本地化要求

适用场景

  1. 01编写 Bagisto PHP 类或服务
  2. 02实现数据库查询、迁移或原始 SQL
  3. 03修改 Blade 模板或用户可见文本

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/bagisto/agent-skills --skill bagisto-coding-standards

安装后在 Claude Code 中输入/bagisto-coding-standards确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

blade-formatting.md
blade.md
code-style.md
comments.md
data-access.md
database-compatibility.md
laravel.md
localization.md
security-authorization.md
security.md

详细介绍

编码规范

所有 Bagisto 代码的规范依据都集中在此处,因此无论修改 DataGrid、支付类、主题还是软件包,都要遵循相同的标准。

格式问题以 Pint 的判断为准。 运行 vendor/bin/pint,并遵循它对空格、导入顺序、尾随逗号等问题的处理。以下内容是 Pint 无法检查的,也是评审人员可能会要求你修改的地方。

参考文件

文件何时查看
code-style.md编写任何 PHP 代码时——多子句条件、类成员顺序
comments.md编写任何语言的注释或文档块时
laravel.md使用框架惯用写法时——事件、迁移、配置、辅助函数、验证、队列
data-access.md读取或写入数据库时——存储库规则及其唯一例外
database-compatibility.md编写任何查询、迁移或原始 SQL 时——必须同时通过 MySQL、MariaDB 和 PostgreSQL 的检查
security.md处理输出、输入、上传、SQL、密钥或支付时
security-authorization.md处理路由、权限、守卫,或用户访问其他用户的数据时
blade.md编写任何 .blade.php 文件时——命名空间、: 与 ::、组件、页面骨架
blade-formatting.md处理缩进、属性布局、@props 对齐、代码示例时
localization.md编写任何面向用户的字符串,或修改 Resources/lang/ 时

@php 代码块内也适用 PHP 规则,尽管 Pint 无法检查其中的代码。

一屏了解规则

  • 每个方法和属性都必须有文档块,无论其可见性如何。描述须为首字母大写、以句号结尾的句子,且最多两行。类型信息应写在签名中;只有原生类型无法表达时,才添加 @param/@return。
  • 类成员按常量 → 属性 → 构造函数 → public → protected → private 排列,每种可见性各自组成一个连续区块。即使某个辅助方法由 public 方法调用,也仍应放在底部的 protected 区块中。
  • 包含多个子句的条件须分行书写,布尔运算符放在每行开头。单子句条件保持单行。判断依据是子句数量,而不是行长。
  • 方法体、对象字面量或标记语言中不得有注释——即使是简短的“原因说明”也不行。不明显的原因应写在方法的文档块或提交说明中。如果某行需要文字说明才能理解,就提取为一个有名称的方法。参见 comments.md。
  • 类上方不得有文档块——任何时候都不行。98.7% 的核心类都没有文档块。文档块应写在方法、属性或常量上,绝不能写在类、接口、trait 或 enum 上。
  • 文档块最多两行。 通常一行即可。如果两行写不下,就不该放在文档块中——删减内容或移到提交说明中。
  • 所有数据库访问都必须通过仓库进行。 控制器、监听器、作业或服务中不得使用 DB::,也不得查询模型。唯一获准的例外是 DataGrid 的 prepareQueryBuilder()。
  • 每个查询都必须能在 MySQL、MariaDB 和 PostgreSQL 上运行。 应使用 db_grammar(),而不是字面值 'like' 或手写 SQL 函数;绝不能通过捕获约束冲突来解决冲突——语句失败会中止整个 PostgreSQL 事务。参见 database-compatibility.md。
  • 事件使用点分隔字符串,而不是类——例如 catalog.product.update.after——并且成对触发 before/after 事件。参见 laravel.md。
  • : 用于绑定 PHP 值,:: 用于将字面量 : 传递给 Vue,且 :: 仅适用于 Blade 组件标签。用错时不会报错。参见 blade.md。
  • 在服务器端进行授权,并在插值时转义。 隐藏控件只是展示层的处理;是否允许访问由路由和控制器决定,而且某个值在元素文本中是安全的,在属性中却可能有危险。参见 security.md。
  • 店面查询都必须限定到所属者。 请求中的 ID 不能单独用于选择记录——这是最容易引入的真实漏洞。参见 security-authorization.md。
  • 所有面向用户的字符串都必须通过 trans() 处理,并将键添加到全部 23 种语言中,再通过 php artisan bagisto:translations:check 验证。
  • 翻译键使用 kebab-case,路由名称使用 snake_case——同一功能的翻译键为 admin::app.eu-withdrawal.view.received-at,路由为 admin.sales.eu_withdrawals.index,因此绝不能通过搜索对方的拼写来重命名其中一个。URL 路径不受这两种规则约束。参见 localization.md。
  • 修复你碰到的问题。 你编辑的文件中原有的违规问题也由你负责——检查整个类的成员顺序和文档块,而不只是自己修改的行。

代码与这些文件不一致时

以当前检出代码为准。遵循周边代码的做法,在总结中说明,并指出差异——这些文件只是某个时点的快照,并非事实标准。

这与文件本身写错的情况不同:未修改的类缺少文档块属于技术债务,而不是惯例。遵循规则,不要照搬最差的示例。

相关内容

  • bagisto-code-review——将以上规则应用于他人的更改。
  • bagisto-package-development——这些规则所依托的代码结构。

评论

支持 Markdown