用途:这是 1C-Bitrix / Bitrix24 的 PHP 开发规范基线,供在开始任何相关任务前参考;具体任务技能按其描述选择,本文收录它们共同假设的规则。基线 main 23.0+,已验证 main 26.800.0。
版本策略:先查项目中 bitrix/modules/main/classes/general/version.php 的 SM_VERSION。标注 Since main X.Y 表示需该版本,各技能给出回退方案;Since main X.Y* 表示精确版本未知,已确认在 X.Y 存在、在 main 25.100.500 中缺失,模块同理。内核源码在 bitrix/modules/<module>/lib/,Since main 26.600 起许多 lib/ 目录改为 PascalCase(如 lib/Data),较早的为小写,需大小写不敏感搜索。资料列出的部分特性起始版本:/local/routes 路由 21.400,/local/.settings.php 24.100,Validation 24.300,控制器渲染助手 25.700,新 make:(service、entity、event、message、agent 等)25.900,Persistent Storage 25.1100,控制器过滤器属性、动作参数规则、LoggerFactory 26.250,模块安装器基于 install/migrations(UpdateSystem\Migration)26.600*,#[ActionAccess] 26.600*,特性开关 Config\Feature 26.700。
硬性规范:自定义代码全放 /local/,绝不改 /bitrix/,同路径下 /local/ 优先;D7 优先,仅当无 D7 API 时用旧接口(CIBlock*、CUser、$DB)并加注释;控制器、路由、组件、事件处理器保持轻薄,逻辑放服务,数据放 ORM 表;使用模块类前调用 Loader::includeModule() / requireModule();声明 declare(strict_types=1)、类型化签名,跨模块边界用 Result/Error 而非异常或魔术数组;/local/.settings.php 会整体替换 /bitrix/.settings.php,需复制全部节;路由只写在 /local/routes/*.php,模块路由从该处引入,不再往 urlrewrite.php 加新路由;模块自身的表、事件、代理放其安装器的 install/migrations,项目数据与设置放 sprint.migration,若未安装则建议安装,不要自造迁移框架。
依赖注入边界:应用服务用构造器 DI,由 ServiceLocator::get(FQCN) 自动装配,仅在接口或标量参数时注册;控制器动作支持参数 DI,需类型提示具体类,接口参数无法解析;控制器构造器不支持 DI,引擎只传 Request;控制台命令在 execute() 中用 ServiceLocator::getInstance()->get();事件处理器在内部解析;Messenger receiver 支持自动装配。services 条目若只给具体类的 className 会禁用自动装配,应改用构造器闭包、constructorParams 或不注册。
安全默认值:不读 $_GET/$_POST/$_SESSION/$_COOKIE,改用 Context request 与 Application::getSession();AJAX 动作保留默认预过滤器(Authentication、HttpMethod、Csrf),并按动作加权限检查;转义输出(htmlspecialcharsbx、Json::encode),转换输入,对进入 ORM select/order/runtime/ExpressionField 的内容做白名单;密钥来自环境变量或 .settings.php,不写入代码、选项或迁移。
完成前检查:代码在 /local/、模块已加载、严格类型;所用内核类/方法/命名参数在项目 main 版本中存在(核对 Since);控制器、组件、模板中无数据库访问,错误经 Result 返回;重复读取使用带标签缓存,ORM 缓存用 cleanCache() 清除;事件与代理在安装时注册、卸载时移除;生产环境 exception_handling.debug 为 false。
限制:以上为规范与版本事实,具体任务技能未在本文展开;部分版本号带星号表示精确版本暂未提供。