You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pyro CMS的twig文件中通过block id获取区块详情

获取路径中block id对应区块信息并在Twig调用的实现方案

1. 确保路由正确捕获blockid参数

首先要确认你的路由规则已经把路径末尾的{blockid}定义为可获取的路由参数,以yaml格式路由配置为例:

playlist_detail:
  path: '/playlist/PLQB0d-uOBCP2vyGFcj3nw252x9CtupDH1/{blockid}'
  controller: '你自己项目对应的控制器方法'

如果路由没有定义这个占位符匹配,后续是拿不到传入的blockid值的。

2. 后端加载对应区块的全量信息

在对应控制器方法中接收路由传入的blockid参数,调用你项目里的区块服务/模型查询对应区块的全部信息,同时做存在性校验:

// 控制器方法示例(以Drupal/Symfony场景为例,其他框架逻辑一致)
public function showPlaylist(string $blockid)
{
    // 根据blockid查询对应区块实体/数据
    $block = $this->blockRepository->findById($blockid);
    if (!$block) {
        // 区块不存在直接返回404
        throw new NotFoundHttpException('请求的区块不存在');
    }

    // 处理区块渲染逻辑、提取全量配置字段
    $blockInfo = $block->toArray(); // 拿到区块全部配置、字段信息
    $blockContent = $this->blockRenderService->build($block); // 生成可直接渲染的区块内容

    // 把数据传递给Twig模板
    return $this->render('playlist/detail.html.twig', [
        'blockInfo' => $blockInfo,
        'blockContent' => $blockContent
    ]);
}

如果你用的是其他框架,把查询、渲染逻辑替换成你项目对应的业务逻辑即可,核心是通过传入的blockid作为查询条件,从存储层取出对应区块的全部数据。

3. Twig模板中调用数据

在对应Twig模板中,直接使用控制器传入的变量即可访问区块全部信息:

{# 访问区块基础配置 #}
<div class="playlist-container">
    <h2>{{ blockInfo.title }}</h2>
    
    {# 直接输出渲染好的区块主体内容 #}
    <div class="block-content">
        {{ blockContent|raw }}
    </div>

    {# 访问区块自定义字段,比如区块备注、关联播放链接等 #}
    {% if blockInfo.remark %}
    <p class="block-remark">{{ blockInfo.remark }}</p>
    {% endif %}
</div>

如果你需要在非对应控制器绑定的公共模板里拿这个blockid,可以直接在Twig里通过请求对象获取:{% set blockId = app.request.attributes.get('blockid') %},但这种方式不推荐,绕过控制器做数据查询会让业务逻辑变零散,也不方便做权限校验。

内容的提问来源于stack exchange,提问作者Vidhya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 03:54:31