proklung/bitrix-symfony-base.git

使用 Symfony 集成的 Bitrix 构建


README

为 1C Bitrix 项目准备的模板。基于 https://github.com/regiomedia/bitrix-project

主要区别:最大程度使用 Symfony。支持捆绑、服务容器具有完整框架功能(注解、自动装配)、路由、控制台等。

保留 Bitrix 的后台、数据库、组件(容器可通过服务定位器访问)。其余部分以尽可能接近 Symfony 的方式编写。

此外,还有我在实际项目中使用的各种功能(放置在 Symfony 捆绑中)。

以及各种娱乐实验的成果,这些实验在工作中证明是有用的。

创建新项目

  • 在 OSPanel/domains 中创建新项目的文件夹,并克隆此基本构建

例如

git clone proklung/bitrix-symfony-base.git ./
  • 配置 Web 服务器以使用目录 sites/s1 或创建类似

    /home/bitrix/www -> /home/bitrix/projectname/sites/s1

    (在 OpenServer 中配置本地域名并指向 sites/s1)

依赖项

  • 安装 composer(后端)依赖项
composer install
  • 安装 npm(前端)依赖项
npm install

Bitrix

  • 删除 bitrix 文件夹
  • 初始化子模块
git submodule init
  • 启动子模块(将克隆 bitrix)
git submodule update

或以其他方式配置它(通过 git submodule ad)。

重要

在此过程之前,更新 include.phpenvironments/*/bitrix/modules/main 中的内容,使用来自子模块或以其他方式安装的 Bitrix 的最新版本。

之后,建议再次执行 composer update 以更新 Bitrix 模块。

符号链接

将网站公共文件移到 sites/s1 目录。

在 Windows 命令提示符中

mklink "local" "../../local" /j
mklink "bitrix" "../../bitrix" /j
mklink "upload" "../../upload" /j

数据库和环境

  • 在 localhost 上创建数据库

  • 从 bitrix/backup 展开数据库备份

  • 创建 .env 文件

touch .env
  • 根据 .env.example 文件填写其数据

  • 展开环境

php bin/jedi env:init default

Эта команда скопирует в директорию `bitrix` системные файлы настроек сконфигурированные для работы с 
[переменными окружения](https://github.com/vlucas/phpdotenv), а также настройки 
[шаблонизатора Twig](https://github.com/maximaster/tools.twig). 

### Миграции

- Установить [модуль миграций](https://github.com/arrilot/bitrix-migrations)

```sh
php migrator install
  • 运行迁移
php migrator migrate

** 在管理界面中安装 基本 Bitrix 组件 模块。

Marketplace > 已安装解决方案 > BБК (bex.bbc)

“构建”前端

npm run encore -- dev

后端

Composer 和 PSR-4 自动加载来自 local/classes 目录的类。命名空间 \Local\

检查通过命令执行(这是使用预置参数运行 phpcs 实用程序)

composer run lint:php

此外,还可以使用 phpcbf 实用程序修复部分发现的问题

composer run fix:php

前端

作为“构建器”,使用 symfony/webpack-encore

默认情况下,前端文件应位于 local/assets 目录。

这可以在配置文件 webpack.config.js 中重定义

主要命令

npm run encore -- dev          # запустить сборку для разработчика один раз
npm run encore -- dev --watch  # запустить сборку для разработчика в режиме слежения за файлами
npm run encore -- production   # запустить сборку для продакшена

Vue

微型模块 vueInvoker 用于在页面上初始化 Vue 组件。它简化了在无法使用单个“根”实例 Vue 时(如单页应用程序中那样)在经典 Web 应用程序中使用 Vue。

用法

输出组件占位符

<div class="vue-component" data-component="DemoApp" data-initial='{"test": "data"}'></div>

创建相应的 Vue 组件(在 local/assets/scripts/vue/components/ 目录中)

<template>
    <div class="demo-app">
        {{ hello }}

        {{ initial.test }}

    </div>
</template>

<script>
    export default {
      data() {
        return {
          hello: 'World',
        };
      },
      props: ['initial'],
    };
</script>

将其添加到 local/assets/scripts/vue/collection.js 集合中

import DemoApp from './components/DemoApp.vue';

export default {
  DemoApp,
};

多站点

项目结构类似于预先配置的多站点在不同域名上,每个站点有独立的目录。核心文件通过相对符号链接进行连接。要添加新站点,需要在./sites/下创建新目录(最好目录名与新的站点代码一致)。然后在该目录中添加必要的文件和目录的链接。

mkdir sites/s2             # создать директорию для дополнительного сайта
cd sites/s2                # перейти в нее
mklink "local" "../../local" /j
mklink "bitrix" "../../bitrix" /j
mklink "upload" "../../upload" /j

接下来需要配置Web服务器以支持新站点。

Composer 脚本

附上了一些示例脚本,这些脚本在post-updatepost-install事件下运行。

  • Local\ComposerScript\RunMigrationsHandler - 运行迁移。

  • Local\ComposerScript\CacheWarmerHandler - 清理和预热缓存。

composer.json文件的scripts部分添加

  "scripts": {
    "post-update-cmd": [
      "Local\\ComposerScript\\RunMigrationsHandler::doInstall",
      "Local\\ComposerScript\\CacheWarmerHandler::doInstall"
    ],
    "post-install-cmd": [
      "Local\\ComposerScript\\RunMigrationsHandler::doInstall",
      "Local\\ComposerScript\\CacheWarmerHandler::doInstall"
    ],
    "cache:warm": "Local\\ComposerScript\\CacheWarmerHandler::doInstall",
    "migrations:run": "Local\\ComposerScript\\RunMigrationsHandler::doInstall"
  },

命令

composer cache:warm

composer migrations:run

其他内容

  • 不得不将包psr/container锁定在版本1.0上。否则,由于接口不匹配,会安装1.1.1(根据Symfony DI的要求),导致结构崩溃。

后果是DI组件目前是5.2版本,而不是最新的5.3版本。