Bitrix Project + Symfony
Заготовка для 1C Bitrix проектов. На базе https://github.com/regiomedia/bitrix-project
Основное отличие: максимальное использование Symfony. Поддерживаются бандлы, сервис контейнер с полным функционалом фрэймворка (аннотации, auto wiring), роутинг, консоль и так далее.
От Битрикса остается админка, база, компоненты (где контейнер доступен через сервис-локатор). Все остальное пишется в максимально приближенной к Symfony манере.
Плюс всевозможный - используемый мною в реальных проектах - функционал (размещается в бандлах Symfony).
А также плоды всевозможных досужих экспериментов, оказавшихся полезными в работе.
Создание нового проекта
- Создать папку нового проекта в OSPanel/domains и Клонировать эту базовую сборку
К примеру:
git clone proklung/bitrix-symfony-base.git ./
-
Настроить вебсервер для работы с директорией
sites/s1
либо сделать симлинк вида/home/bitrix/www -> /home/bitrix/projectname/sites/s1
(Настроить локальный домен в OpenServer со ссылкой на sites/s1)
Зависимости
- Установить зависимости composer (backend):
composer install
- Установить зависимости npm (frontend):
npm install
Bitrix
- Удалить папку bitrix
- Инициализировать submodule:
git submodule init
- Запустить submodule (cклонируется bitrix):
git submodule update
Или настроить его иным способом (через git submodule ad).
Символьные ссылки
В директорию sites/s1
перенести публичные файлы сайта.
В виндовом терминале:
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)
и [логгера Monolog](https://github.com/bitrix-expert/monolog-adapter)
### Миграции
- Установить [модуль миграций](https://github.com/arrilot/bitrix-migrations)
```sh
php migrator install
- Запуск миграций
php migrator migrate
** Доустановить модуль Базовых Битрикс компонентов. в административном интефейсе:
Marketplace > Установленные решения > ББК (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 классическом веб-приложении, когда нет возможности использовать один "корневой" экземпляр 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
Далее необходимо настроить веб-сервер для работы с новым сайтом.