Drupal 8中如何在自定义区块中添加PHP代码
在Drupal 8自定义区块中添加获取基础URL的PHP代码实现方法
嘿,我来帮你搞定这个需求!首先得提醒你:Drupal 8不推荐直接在区块里写裸PHP代码(这会带来严重的安全风险,比如代码注入漏洞),最规范、安全的做法是通过自定义模块创建区块插件,下面一步步教你实现:
第一步:创建自定义模块的基础结构
先在你的Drupal站点的modules/custom/目录下新建一个模块文件夹,比如命名为custom_base_url_block,然后创建以下文件:
custom_base_url_block.info.yml(模块信息文件,必填)src/Plugin/Block/BaseUrlBlock.php(区块插件类文件,核心逻辑)
第二步:编写模块信息文件
打开custom_base_url_block.info.yml,粘贴以下内容:
name: 'Custom Base URL Block' type: module description: 'A custom block that displays the site base URL' core_version_requirement: ^8 || ^9 || ^10 package: Custom
这个文件是告诉Drupal这是一个合法的模块,指定了模块名称、描述、兼容的Drupal版本等信息。
第三步:编写自定义区块插件类
打开src/Plugin/Block/BaseUrlBlock.php,粘贴以下代码:
<?php namespace Drupal\custom_base_url_block\Plugin\Block; use Drupal\Core\Block\BlockBase; /** * Provides a 'Base URL' block. * * @Block( * id = "base_url_block", * admin_label = @Translation("Base URL Block"), * category = @Translation("Custom") * ) */ class BaseUrlBlock extends BlockBase { /** * {@inheritdoc} */ public function build() { // 获取站点的绝对基础URL $base_url = \Drupal\Core\Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(); // 返回渲染数组,Drupal会自动处理成HTML return [ '#markup' => '<p>站点基础URL:' . $base_url . '</p>', ]; } }
代码解释:
- 我们继承了Drupal核心的
BlockBase类,这是创建自定义区块的标准方式 - 通过
@Block注解定义了区块的ID、后台显示名称和分类 - 在
build()方法里,用\Drupal\Core\Url::fromRoute()方法获取首页的绝对URL,这就是站点的基础URL - 最后返回一个渲染数组,把基础URL输出成HTML
第四步:启用模块并添加区块
- 登录Drupal后台,进入扩展页面(路径:/admin/modules)
- 在列表里找到
Custom Base URL Block模块,勾选后点击“安装” - 进入结构 > 区块布局页面(路径:/admin/structure/block)
- 在你想要放置区块的区域(比如侧边栏、页脚),点击“放置区块”按钮
- 在弹出的列表里找到“Base URL Block”,点击“放置区块”,设置好显示规则后保存即可
(不推荐)如果非要用PHP代码区块快速实现(仅开发环境使用)
如果你只是在开发环境临时测试,可以这样做:
- 先启用核心的PHP筛选器模块(在扩展页面搜索“PHP filter”)
- 进入结构 > 区块布局,点击“放置区块”,选择“自定义HTML”区块
- 在区块内容的文本格式里选择“PHP代码”(注意:生产环境绝对不要开启这个文本格式!)
- 在内容框里输入以下代码:
<?php // 获取基础URL并输出 $base_url = \Drupal\Core\Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(); echo '<p>站点基础URL:' . $base_url . '</p>'; ?>
- 保存区块即可看到效果
再次强调:生产环境绝对不要使用PHP代码区块,这会给站点带来极大的安全隐患!
内容的提问来源于stack exchange,提问作者Vamshi M
相关产品推荐
相关产品推荐

