定制 proklung/core-framework-extension-bundle 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

proklung/core-framework-extension-bundle

Composer 安装命令:

composer require proklung/core-framework-extension-bundle

包简介

Core framework bundle for custom Symfony

README 文档

README

То, что входит в стандартный фрэймворк Symfony (в бандл Symfony\Bundle\FrameworkBundle\FrameworkBundle), но не завелось в кастомном варианте (потребовало форка) и(или) несет необязательный функционал.

"Core" бандл. Без него функционал сервис-контейнера будет куцым (минималистичным). Многое не заработает.

По сути, это FrameworkBundle с наполовину выпиленным функционалом (не нужным в кастомных сборках) - формы, workflow, translators & и т.п.

Установка

composer.json:

    "repositories": [
        {
            "type": "git",
            "url": "https://github.com/proklung/core.framework.extension.bundle"
        }
    ]
composer require proklung/core-framework-extension-bundle

Конфигурационный файл

По адресу local/packages/framework.yaml (или /config/packages/framework.yaml для Wordpress).

Пример:

framework:
  validation:
    enabled: true
    enable_annotations: true

  cache:
    enabled: true
    app: cache.adapter.filesystem
    system: cache.adapter.system
    directory: '%kernel.project_dir%/bitrix/cache/symfony'
    default_memcached_provider: 'memcached://localhost'

  pools:
    my_cache_pool:
      public: true
      adapter: cache.adapter.filesystem
      default_lifetime: 600
  twig:
    # Пути к шаблонам
    default_path: '%kernel.project_dir%/local/twig'
    paths:
      '%kernel.project_dir%/local/twig': ~
      # С namespace
      '%kernel.project_dir%/../../vendor/symfony/web-profiler-bundle/Resources/views': WebProfiler

    cache: false
    cache_dir: '/bitrix/cache/twig'
    autoescape: 'name'
    autoescape_service: ~
    autoescape_service_method: ~
    base_template_class: 'Twig\Template'
    debug: '%kernel.debug%'
    strict_variables: '%kernel.debug%'

  dbal:
    enabled: true
    url: '%env(DATABASE_URL)%'
    charset: UTF8
    default_connection: default
    types: ~

    connections:
        default:
          url: "%env(DATABASE_URL)%"
          dbname:           '%env(DB_NAME)%'
          user:             '%env(DB_USER)%'
          password:         '%env(DB_PASSWORD)%'
          host:             localhost
          mapping_types:
            enum: string

  serializer:
    enabled: true
    enable_annotations: true
    max_depth_handler: false
    name_converter: 'serializer.name_converter.camel_case_to_snake_case'

  secrets:
    enabled: true
    vault_directory: '%kernel.project_dir%/config/secrets/%kernel.environment%'
    local_dotenv_file: '%kernel.project_dir%/.env.%kernel.environment%.local'
    decryption_env_var: 'base64:default::SYMFONY_DECRYPTION_SECRET'

  annotations:
    enabled: true
    file_cache_dir: '%kernel.cache_dir%/annotations'
    cache: 'file'
    annotations_ttl_cache: 7200

  session:
    enabled: true

  csrf_protection:
    enabled: true

  property_access:
    enabled: true

  mailer:
    enabled: true

  messenger:
    enabled: true

  notifier:
    enabled: true

  lock:
    enabled: true
    resources: ~

Консольные команды

Стандартные:

  • debug:router
  • router:match
  • debug:event-dispatcher
  • debug:container
  • debug:autowiring
  • config:dump-reference

Автоматическое подхватывание команд установленых битриксовых модулей

Конструкция пробегает по установленным (в папках local и bitrix модулям), где ищет файл cli.php. Он должен возвращать массив с инициализированными командами этого модуля.

    return [
        new ExampleCommand(), // Должен наследоваться от \Symfony\Component\Console\Command\Command
        container()->get('console.command.about') // Из глобального контейнера
    ];

Эти команды регистрируются в общем для приложения контейнере команд и доступны через php bin/console.

Если пакет запускается не в Битриксе - ничего страшного, функционал игнорируется.

Расширения

Любое расширение может быть отключено проставлением false параметру enabled соответствующего раздела файла framework.yaml.

DBAL

Validator

Cache

Serializer

Secrets

Lock

док

Notifier

Messenger

Всё согласно документации

Из нюансов:

  • Auto-wiring MessageHandlerInterface не срабатывает. Нужно прописывать сервисы саморучно.
  • Чтобы заработала конструкция с RabbitMQ на сервере должно быть установлено php_amqp расширение для PHP.

Mailer

framework.yaml:

  mailer:
    enabled: true
    dsn: gmail+smtp://robotivanov2020:xxjqfjyegwmznrtb@default

    envelope:
      recipients: ['example@mail.ru']
  
    # Кастомные параметры
    default_email_from: 'email@gmail.com'
    default_email_title: 'Super title'
    # Шаблон - для strftime, где элемент паттерна обрамлен скобками.
    dsn_file: file:///upload/emails/{Y}/{m}/{d}/@hash.eml

File mailer transport

       use Symfony\Component\Mime\Email;
       $email = (new Email())
            ->from('from@mail.ru')
            ->to('example@gmail.com')
            ->subject('Time for Symfony Mailer!')
            ->text('Sending emails is fun again!')
            ->html('<p>See Twig integration for better HTML integration!</p>');

        /** @var \Symfony\Component\Mailer\Transport\TransportInterface $factory */
        $factory = container()->get('custom_mailer_transports.filesystem');
        $factory->send($email);

Письмо запишется в файл, находящийся по адресу, указанному параметром dsn_file в framework.yaml.

Кастомный отправитель писем

        $factoryMail = container()->get('mailer_bundle.send_email_via_factory');
        $message = $factoryMail->createMessage(
            'example@gmail.com',
            'Testing',
            'Testing body',
            [
                'Лог' => '/my_app-2021-26-07.log' // Файл приаттачится к письму.
            ]
        );

        $sender = container()->get('custom_mail_sender');
        $sender->sendImmediately($message);

Чтение PHP 8 атрибутов на PHP >=7.2

С использованием компонента Spiral Framework.

Сервисы:

  • spiral.annotations_selective_reader - совмещенный читатель аннотаций Doctrine и PHP 8 атрибутов.
  • spiral.psr6_selective_reader - PSR-6 совместимый кэшированный вариант совмещенного читателя.
  • spiral.attribute_reader - отдельный читатель PHP 8 атрибутов.
  • spiral.attribute_cached_reader - кэшированный вариант сервиса spiral.attribute_reader.
  • spiral.annotation_reader - читатель аннотаций Doctrine из Spiral Framework.
  • spiral.annotation_cached_reader - кэшированный вариант сервиса spiral.annotation_reader.

Если в свойствах фрэймворка (framework.yaml) параметр cache не равен file, то все кэшированные варианты сервисов удаляются из контейнера.

Параметры кэширования - file_cache_dir и ttl_cache - берутся из конфигурации framework.yaml.

统计信息

  • 总下载量: 4
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 1
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2021-05-05

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固