用途:说明 Bitrix 项目中代码应放在哪里,以及模块与类的自动加载方式。基线 main 23.0+,验证于 main 26.800.0。
目录根:/bitrix/ 为内核与市场模块,会被更新替换,禁止编辑;/local/ 存放全部项目代码,相同相对路径下 /local/ 优先于 /bitrix/;/upload/ 存放用户与模块文件。项目代码位于 /local/modules/<vendor>.<module>/,另有 components、templates、routes/web.php、js、activities、gadgets、blocks 等目录。
php_interface:init.php 每次请求在页面代码前执行,只放模块加载前需要的常量和无归属模块的运行时 addEventHandler();其余逻辑应放入模块。dbconn.php 自 main 24.100 起位于此处。after_connect_d7.php 仅在默认数据库连接后执行,使用 $this->queryExecute("SET …") 设置字符集、sql_mode、时区;/local 副本会禁用 /bitrix 版本,需迁移其语句。其他连接通过 'include_after_connected' => '/abs/path.php' 指定各自文件。
模块加载:必需模块用 Loader::requireModule('vendor.module'),失败抛 LoaderException;可选集成用 if (Loader::includeModule('crm')) { … };共享/演示状态用 Loader::includeSharewareModule()。includeModule() 在模块未注册于 b_module 或 include.php 返回 false 时返回 false。成功时注册 PSR-4 根、包含 include.php、注册模块服务。应在入口点(控制器、agent、命令)加载一次,而非深层服务中。旧式 CModule::IncludeModule() 仅作兼容。
PSR-4:根 vendor.module → Vendor\Module\ → lib/;单词模块 mymodule → Bitrix\Mymodule\。目录对应命名空间段,文件对应类,如 Vendor\Module\Public\Service\PostService → lib/Public/Service/PostService.php。Loader 先尝试精确大小写路径,再尝试全小写。不要按路径 require 内核 lib/ 文件,内核更新会重命名。非 PSR-4 旧代码可在 include.php 中用 Loader::registerNamespace('Vendor\Legacy', $absDir) 或 Loader::registerAutoLoadClasses('vendor.module', ['COldClass' => 'classes/old.php'])。
Composer:composer.json 放在 DOCUMENT_ROOT 之外(如项目根),.settings.php 中配置 'composer' => ['value' => ['config_path' => '../composer.json']],内核会包含其 vendor/autoload.php。bitrix.php(Symfony Console)需要它。切勿向 /bitrix/ 安装包。
文件优先级:组件、站点模板、php_interface 文件、.settings*.php 均 /local/ 优先;组件模板中站点模板 components/… 覆盖组件自身 templates/;模块 /local/modules/<id> 优先。模块路由不会自动加载,需从 /local/routes/web.php 引入。