PHPackages                             proklung/wp-core-symfony - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. proklung/wp-core-symfony

ActiveLibrary

proklung/wp-core-symfony
========================

Core Symfony functionality for Wordpress

1.96(4y ago)33MITPHPPHP &gt;=7.3 | ~8

Since May 18Pushed 3y ago1 watchersCompare

[ Source](https://github.com/ProklUng/wp.core.symfony)[ Packagist](https://packagist.org/packages/proklung/wp-core-symfony)[ RSS](/packages/proklung-wp-core-symfony/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (18)Versions (54)Used By (0)

Базовый функционал для внедрения Symfony в Wordpress
====================================================

[](#базовый-функционал-для-внедрения-symfony-в-wordpress)

Установка
---------

[](#установка)

composer.json:

```
    "repositories": [
        {
            "type": "git",
            "url": "https://github.com/proklung/wp.core.symfony"
        }
    ]
```

```
composer require proklung/wp-core-symfony
```

Инициализация
-------------

[](#инициализация)

В `wp-config.php`:

```
use Prokl\ServiceProvider\LoadEnvironment;

/** Загрузить окружение. Параметр конструктора - путь к .env файлам */
$environment = new LoadEnvironment($_SERVER['DOCUMENT_ROOT']);
$environment->load();

$environment->process();
```

В `functions.php` темы:

```
use Prokl\ServiceProvider\ServiceProvider;

$serviceProvider = new ServiceProvider(
    'app/symfony/services.yaml',
    $_ENV['APP_ENV'],
    (bool)$_ENV['APP_DEBUG'],
    '/config/bundles.php'
);
```

Для обеспечения "преемственности" (похожести) с оригиналом можно задать путь к файлу конфигурации (скажем, `bundles.php`) бандлов четвертым (необязательным) параметром конструктора.

#### Значимые переменные окружения

[](#значимые-переменные-окружения)

- `APP_ENV` - код окружения (dev, prod, test и т.д.)
- `APP_DEBUG` - режим отладки

Конфигурирование
----------------

[](#конфигурирование)

1. Опция `compile.container` в подтягиваемом конфиге - компилировать ли контейнер в файл. Если не задана, то "нет, не компилировать". Имеет смысл для окружения, не равного "dev". Т.е. опция управляет дампированием контейнера на проде.

Место, где хранятся дампы контейнеров: `/symfony-app/containers`

#### Пути к кэшу и логам

[](#пути-к-кэшу-и-логам)

Определяются классом `AppKernel`. По умолчанию:

- путь к кэшу (`kernel.cache_dir`) - `/wp-content/cache`
- путь к логам (`kernel.logs_dir`) - `'/../../logs'` (два уровня выше DOCUMENT\_ROOT - особенности используемой сборки Битрикс)

Чтобы это изменить нужно отнаследоваться от класса `AppKernel` и переопределить несколько переменных:

```
use Prokl\ServiceProvider\Services\AppKernel;

class MyKernel extends AppKernel
{
   protected $cacheDir = '/bitrix/cache/mycache';

   protected $logDir = '/logs-saver';
}
```

(второй вариант - отнаследоваться от `AppKernel` и переопределить методы `getCacheDir` и `getLogDir`).

Изменить через наследование класс ядра:

```
class MyServiceProvider extends ServiceProvider
{
    protected $kernelServiceClass = MyKernel::class;

    protected $cacheDir = '/wp-content/my-cache';

}
```

Второй вариант - отнаследоваться от `ServiceProvider` и заменить метод `getPathCacheDirectory` своей логикой.

Поддержка бандлов
-----------------

[](#поддержка-бандлов)

Файл конфигурации - `/config/standalone_bundles.php`. Этот путь можно изменить через конструктор.

Папка, где лежат конфигурации - `/config`. Конфигурации бандлов - `/config/packages`.

#### Проблема с приватными сервисами

[](#проблема-с-приватными-сервисами)

Согласно концепции Symfony все сервисы (в идеале) должны быть приватными и инжектиться. Но в кастомном случае часто нужно получать их через хелпер-сервис-локатор. Для превращения нужных сервисов в публичные предлагается такое решение. В общем разделе параметров контейнера появилась опция `publicable_services`:

```
parameters:
  publicable_services:
    - 'snc_redis.default'
```

После компиляции контейнера приватный сервис `snc_redis.default` станет публичным.

Сепаратные микро-контейнеры
---------------------------

[](#сепаратные-микро-контейнеры)

Отдельные контейнеры - со своим конфигом, полностью изолированные (для модулей, плагинов и т.п.).

```
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Prokl\ServiceProvider\Micro\AbstractStandaloneServiceProvider;
use Prokl\ServiceProvider\Micro\ExampleAppKernel;

class ExampleMicroServiceProvider extends AbstractStandaloneServiceProvider
{
    /**
     * @var ContainerBuilder $containerBuilder Контейнер.
     */
    protected static $containerBuilder;

    /**
     * @var string $pathBundlesConfig Путь к конфигурации бандлов.
     */
    protected $pathBundlesConfig = '/src/Micro/example.config/standalone_bundles.php';

    /**
     * @var string $configDir Папка, где лежат конфиги.
     */
    protected $configDir = '/src/Micro/example.config/example.config/example.yaml';

     /**
     * @var string $kernelServiceClass Класс, реализующий сервис kernel.
     * Нужен для того, чтобы экземпляры контейнеров в kernel сервисе не перемешивались.
     */
    protected $kernelServiceClass = ExampleAppKernel::class;

}
```

Пример класса `ExampleAppKernel`:

```
/**
 * Class ExampleAppKernel
 * @package Prokl\ServiceProvider\Micro
 */
use Prokl\ServiceProvider\Micro\AbstractKernel;

class ExampleAppKernel extends AbstractKernel
{
    protected static $kernelContainer;
}
```

Где надо - инициализация:

```
$micro = new ExampleMicroServiceProvider(
    'src/SymfonyDI/Micro/example.config/example.yaml',
    $_ENV['APP_ENV'],
    (bool)$_ENV['APP_DEBUG']
);
```

Хэлпер `container` заточен под работу с микро-сервис-провайдерами:

```
var_dump(container($micro)->getParameter('example'));
```

Автозапуск сервисов
-------------------

[](#автозапуск-сервисов)

Чтобы сервис запустился автоматически после инициализации контейнера, он должен быть помечен тэгом `service.bootstrap`.

```
  app.options:
    class: Local\Services\AppOptions
    arguments: ['%kernel.environment%', '@parameter_bag']
    tags: ['service.bootstrap']
```

Поддерживается приоритет запуска. Тогда надо так:

```
  app.options:
    class: Local\Services\AppOptions
    arguments: ['%kernel.environment%', '@parameter_bag']
    tags:
      - { name: 'service.bootstrap', priority: 100 }
```

Сервис с приоритетом 100 запустится раньше сервиса с приоритетом 200.

Автоматическая подвязка на хуки Wordpress
-----------------------------------------

[](#автоматическая-подвязка-на-хуки-wordpress)

Тэг: `custom.events.init`.

1. `type` - add\_action, add\_filter &amp; etc По умолчанию: `add_action`.
2. `event` - название хука.
3. `method` - метод-обработчик в сервисе
4. `priority` - приоритет

```
Local\Events\CometCacheClearMemcachedEvent:
    tags:
      - { name: 'custom.events.init', event: 'post_class', method: 'handler', type: 'add_filter',  priority: 100 }
```

Автоматическая регистрация типов постов
---------------------------------------

[](#автоматическая-регистрация-типов-постов)

Тэг: `post.type`.

Реализует интерфейс `PostTypeDataInterface` с двумя методами:

- `getNameTypePost` - название типа поста
- `getRegistrationData` - массив с традиционными для объявления типа поста данными. Типа такого:

```
return [
            'labels' => [
                'name' => __('Instagram'),
                'singular_name' => __('Instagram'),
            ],

            'public' => true,
            'publicly_queryable' => true,
            'show_ui' => true,
            'show_in_menu' => true,
            'query_var' => true,
            'rewrite' => 'instagram',
            'capability_type' => 'post',
            'has_archive' => 'instagram',
            'hierarchical' => false,
            'menu_position' => null,
            'supports' => ['title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments'],
        ];
```

```
Local\PostTypes\InstagramPostType:
    tags:
      - { name: 'post.type' }
```

Сервисы по умолчанию
--------------------

[](#сервисы-по-умолчанию)

Автоматом регистрируются несколько сервисов:

- `service_container` (и alias) - сервис-контейнер целиком
- `app.request` - конвертор глобалов в Request
- `custom.post.type.registrator` - регистратор кастомных типов постов в Wordpress
- синонимы сервиса `kernel`.
- `delegated_container_manipulator` - манипулятор делегированными контейнерами.

Хэлперы
-------

[](#хэлперы)

1. `container()` - отдает экземпляр контейнера (выступает в роли сервис-локатора):

```
$kernel = container()->get('kernel');
```

2. `delegatedContainer()` - отдает экземпляр манипулятора (реализующего интерфейс `Symfony\Component\DependencyInjection\ContainerInterface`) делегированными контейнерами.

```
$moduleService = delegatedContainer()->get('my_module_id.service');
```

Делегированный контейнер - автономный контейнер, сформированные в модуле, плагине и тому подобных местах.

В контейнере он помечается тэгом `delegated.container` (их может быть сколь угодно много):

```
  module_notifier_container:
    class: Symfony\Component\DependencyInjection\ContainerInterface
    factory: ['Proklung\Notifier\DI\Services', 'getInstance']
    tags:
      - { name: 'delegated.container' }
```

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~5 days

Recently: every ~41 days

Total

53

Last Release

1571d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/9210c86ee6734e537eaf22c0f2fe7a965451e340e39e1aae2b74013f24c2660d?d=identicon)[gedovan](/maintainers/gedovan)

---

Top Contributors

[![ProklUng](https://avatars.githubusercontent.com/u/19857467?v=4)](https://github.com/ProklUng "ProklUng (60 commits)")

---

Tags

php7symfonysymfony-wordpresswordpresswordpress-symfony

### Embed Badge

![Health badge](/badges/proklung-wp-core-symfony/health.svg)

```
[![Health](https://phpackages.com/badges/proklung-wp-core-symfony/health.svg)](https://phpackages.com/packages/proklung-wp-core-symfony)
```

###  Alternatives

[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.4k5.6M651](/packages/sylius-sylius)[prestashop/prestashop

PrestaShop is an Open Source e-commerce platform, committed to providing the best shopping cart experience for both merchants and customers.

9.0k15.4k](/packages/prestashop-prestashop)[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[ec-cube/ec-cube

EC-CUBE EC open platform.

78527.0k1](/packages/ec-cube-ec-cube)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.3M152](/packages/sulu-sulu)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

595.2M386](/packages/shopware-core)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
