vantt / drupal-bundle
集成Symfony4与Drupal
Requires
- php: >=5.3.2
- friendsofsymfony/user-bundle: *
- symfony/http-foundation: >=2.1,<3.0-dev
- symfony/http-kernel: >=2.1,<3.0-dev
- twig/extensions: 1.0.*
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原生类来管理会话。
预览
如果安装成功完成,欢迎页面看起来像
您可以在底部看到Symfony Web调试工具栏;-)。