将页面变量获取到奏鸣曲树枝模板

Posted

技术标签:

【中文标题】将页面变量获取到奏鸣曲树枝模板【英文标题】:Getting the page variable to Sonata twig templates 【发布时间】:2020-01-15 02:44:35 【问题描述】:

使用奏鸣曲模板时,PageBundle 中的各个页面旨在扩展 page.site.layout 模板,然后您可以使用 twig 标准块系统将内容放置在您喜欢的位置。但是我发现页面变量在我的页面上未定义,我试图了解页面变量如何到达它们。

我在多个模板中使用了 var_dump'ed 页面变量,但无法找到它的位置,我尝试使用谷歌搜索并没有找到任何感兴趣的内容。

% extends page.site.layout %

我希望 page 变量默认在每个奏鸣曲页面中可供我使用,我不确定是否需要从奏鸣曲传入页面,我有点认为它是由奏鸣曲处理的?

【问题讨论】:

【参考方案1】:

希望这会有所帮助,这就是我的做法。

页面帮助服务

namespace App\Service;

use Sonata\PageBundle\CmsManager\CmsManagerSelectorInterface;
use Sonata\PageBundle\Model\PageInterface;
use Sonata\PageBundle\Page\TemplateManagerInterface;

class PageHelper

    private $cmsSelector;
    private $templateManager;

    public function __construct(
        CmsManagerSelectorInterface $cmsSelector,
        TemplateManagerInterface $templateManager
    ) 
        $this->cmsSelector = $cmsSelector;
        $this->templateManager = $templateManager;
    

    public function getCurrentPage(): ?PageInterface
    
        $page = $this->cmsSelector->retrieve()->getCurrentPage();
        if ($page instanceof \Sonata\PageBundle\Model\SnapshotPageProxy) 
            $page = $page->getPage();
        

        return $page;
    

    public function getTemplatePath(PageInterface $page): ?string
    
        $template = $this->templateManager->get($page->getTemplateCode());
        if (null !== $template) 
            return $template->getPath();
        

        return null;
    

Twig 扩展获取当前页面或(页面的)模板:

namespace App\Service;

use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
use Twig\TwigFunction;

class TwigPageExtension extends AbstractExtension

    private $pageHelper;

    public function __construct(PageHelper $pageHelper)
    
        $this->pageHelper = $pageHelper;
    

    public function getFunctions(): array
    
        return [
            new TwigFunction('current_page', function () 
                return $this->pageHelper->getCurrentPage();
            ),
            new TwigFunction('current_page_template_path', function () 
                return $this->pageHelper->getTemplatePath($this->pageHelper->getCurrentPage());
            ),
        ];
    

【讨论】:

以上是关于将页面变量获取到奏鸣曲树枝模板的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 使用变量重定向到树枝页面

Symfony Sonata Admin Bundle - 将带有树枝模板的自定义字段导出到 XLS

如何在奏鸣曲页面中创建页面?

PHP将html放在树枝变量中?

奏鸣曲管理员变量“form_helper”不存在。树枝更新后

Sonata Admin:获取所有页面的下拉列表