vantt/drupal-bundle

集成Symfony4与Drupal

安装: 2

依赖者: 0

建议者: 0

安全: 0

星星: 0

观察者: 1

分支: 20

类型:symfony-bundle

1.0.0 2015-08-31 16:40 UTC

This package is auto-updated.

Last update: 2024-09-25 02:46:47 UTC


README

  • EkinoDrupalBundle最初并非为Symfony 4开发。
  • 此定制版本已针对Symfony 4.4进行了修复,并且Symfony将处理Drupal会话。
  • 原始版本将让Drupal首先启动,然后是symfony。此版本让symfony首先启动。
  • Symfony将处理Drupal身份验证
  • 我们可以使用Symfony路由或Drupal菜单来处理页面。

此包与20steps的Bricks深度集成,包括Symfony 4与Drupal7以及反之亦然。这是通过对Drupal核心进行微小修改实现的。

安装

  • 需要此包。
  • 启用包。
  • 将ToSymfony.patch复制到项目根目录并应用它
  • 将Resources/ekino_drupal.yaml复制到配置目录。
  • 将Resources/security.yaml中的设置合并到config/security.yaml中
  • 将Resources/ekino_drupal_routes.yaml中的设置复制到config/routes.yaml的末尾
  • 运行MySQL Table Creation以创建会话和rememberMe令牌。
  • 调整config/security.yaml以进行防火墙控制。

CREATE TABLE sessions_sym ( sess_id VARCHAR(128) NOT NULL PRIMARY KEY, sess_data BLOB NOT NULL, sess_time INTEGER UNSIGNED NOT NULL, sess_lifetime INTEGER UNSIGNED NOT NULL ) COLLATE utf8mb4_bin, ENGINE = InnoDB;

CREATE TABLE rememberme_token ( series char(88) UNIQUE PRIMARY KEY NOT NULL, value char(88) NOT NULL, lastUsed datetime NOT NULL, class varchar(100) NOT NULL, username varchar(200) NOT NULL );

以下是从Ekino的原配置

根据您的需求调整etc/config/ekino_drupal.yaml文件

parameters:
    session.flashbag.class:       Ekino\Bundle\DrupalBundle\Port\DrupalFlashBag
    session.attribute_bag.class:  Ekino\Bundle\DrupalBundle\Port\DrupalAttributeBag

framework:
    # ... configuration options
    session:
        # ... configuration options
        storage_id:     ekino.drupal.session.storage

ekino_drupal:
    root:          %kernel.root_dir%/../web
    logger:        ekino.drupal.logger.watchdog
    strategy_id:   ekino.drupal.delivery_strategy.symfony
    # attach a security token to the following provider keys
    provider_keys: [main, admin]

    # not required
    entity_repositories:
        # 3 equivalent examples of configuration:
        - { bundle: page }
        - { type: node, bundle: page }
        - { type: node, bundle: page, class: Ekino\Bundle\DrupalBundle\Entity\EntityRepository }
        # you can also define an entity repository:
        - { type: node, class: Application\Ekino\Bundle\DrupalBundle\Entity\Node\NodeRepository }

    # switch to true if you want to prefix the name of Symfony tables
    table_prefix:
        enabled: false
        prefix:  symfony__
        exclude: [users]

    # optional
    session:
        refresh_cookie_lifetime: true # default value: false

# declare 2 required mapping definition used by Drupal
doctrine:
    dbal:
        driver:   %database_driver%
        dbname:   %database_name%
        user:     %database_user%
        host:     %database_host%
        port:     %database_port%
        password: %database_password%
        charset:  UTF8

        mapping_types:
            longblob: object
            blob: object

        # Tips: this allows Doctrine to consider only tables starting with
        # "symfony__" during a migration generation.
        # Think to add Doctrine migrations table here or configure it in
        # the doctrine_migrations section (table_name)
        schema_filter: ~^(symfony__|migration_versions)~

此包提供了3种交付策略

  • ekino.drupal.delivery_strategy.background: Drupal从不返回响应,symfony返回
  • ekino.drupal.delivery_strategy.drupal: 即使页面是404,Drupal也总是返回响应
  • ekino.drupal.delivery_strategy.symfony: 只有当页面不是404时,Drupal才返回响应

(可选)部分entity_repositories允许您轻松与Drupal 7.x API交互,从Symfony代码中检索内容。配置提供了默认值

  • 默认实体类型是node
  • 默认存储库类是Ekino\Bundle\DrupalBundle\Entity\EntityRepository,您可以自由配置自己的

更新查询

UPDATE users SET `emailCanonical` = `mail`, `usernameCanonical` = `name`, `roles` = 'b:0;';

使用方法

可以从Drupal内部使用Symfony服务

<?php
function drupal_foo_function() {
    $result = symfony_service('reusage_service')->foo();

    // do some stuff with $result
}

安全

您可以使用Drupal权限来保护Symfony路由,前缀为PERMISSION_DRUPAL_。

security:
    role_hierarchy:
        # ...

    firewalls:
        # ...

    access_control:
        - { path: ^/symfony/admin, role: PERMISSION_DRUPAL_ACCESS_ADMINISTRATION_PAGES }

PERMISSION_DRUPAL_ACCESS_ADMINISTRATION_PAGES翻译为“访问管理页面”并用于user_access和全局Drupal用户。

如果您想使用“个人访问”权限,请使用角色PERMISSION_DRUPAL_PERSONAL_ACCESS,例如。

限制

  • 由于Drupal初始化自己的会话处理程序且无法更改,因此无法使用Symfony原生类来管理会话。

预览

如果安装成功完成,欢迎页面看起来像

Screenshot

您可以在底部看到Symfony Web调试工具栏;-)。