【问题标题】:Symfony2: Extend php-sdk kit to custom bundleSymfony2:将 php-sdk 工具包扩展到自定义包
【发布时间】:2014-07-23 19:08:49
【问题描述】:

使用 Symfony2、Twig 和 Prismic:

我查看了以下资源,但我仍然不清楚如何在 Symfony2 中扩展某些方法

http://symfony.com/doc/current/cookbook/bundles/inheritance.html http://symfony.com/doc/current/cookbook/bundles/override.html

在我的供应商目录中有一个棱镜文件夹,其中包括以下目录:

vendors/prismic
     php-sdk
     prismic-bundle

对于我的应用程序,我复制了 prismic-bundle 目录并将其移至此处:

src/VAP/Bundle/PrismicBundle

然后更改 AppKernal.php 以包含此捆绑包:

// new Prismic\Bundle\PrismicBundle\PrismicBundle() ..removed the connection to the vendor dir

new VAP\Bundle\PrismicBundle\PrismicBundle() ..use this custom directory

效果很好。

但是,php-sdk 目录中有一些方法是从我的自定义 PrismicBundle 中调用的,我需要对其进行扩展或覆盖。例如,树枝模板可能会调用

var.getStructuredText('blog.body').asHtml(ctx.linkResolver)

位于此处:

供应商/prismic/php-sdk/src/Prismic/Fragment/StructuredText.php

我将如何/在哪里创建一个可以扩展/覆盖上述文件的文件?

如果 php-sdk 是一个捆绑包,还是它是供应商目录中原始 PrismicBundle 的一部分,我也感到困惑?

【问题讨论】:

    标签: php symfony twig bundle


    【解决方案1】:

    首先,你说你在你的src文件夹中复制了PrismicBundle,你为什么不使用bundle继承过程?

    public function getParent()
    {
        return 'PrismicBundle';
    }
    

    对于你的问题,你必须改变棱镜php-sdk的行为,可能的原因:

    • 1) 此 sdk 构建不完善
    • 2) 你没有正确使用它
    • 3) 你想要一个不被棱镜支持的非常自定义的行为

    IMO,可能的解决方案是:

    • 1) fork sdk 以根据您的需要添加兼容性
    • 2) 想办法满足您的需求
    • 3) 在您的自定义 PrismicBundle 中创建一个新服务,根据需要调用 prismic api。

    对于你的最后一个问题,afaik prismic/php-sdk 是原始 php 中的 api 实现,而 prismic/prismic-bundle 是这个原始 php SDK 和 Symfony 之间的桥梁,实现了 Symfony 提供的服务和所有商品。

    【讨论】:

    • 我尝试使用继承,但无法使其正常工作。使用继承时,我应该将我的自定义函数放在哪里,以覆盖来自供应商的函数?
    • 此文档解释了如何覆盖捆绑包的任何部分:symfony.com/doc/current/cookbook/bundles/override.html 如果您想覆盖 PrismicBundle 中的服务,请查看“CompilerPass”部分。
    • 使用包继承很重要,因为您可以更轻松地升级到较新版本的包,但只覆盖您需要自定义的功能。我在覆盖树枝模板时遇到了一些问题,即使在开发阶段也只需要清除缓存即可使新文件生效。
    • 在供应商目录中,我不确定 php-sdk 是否是一个捆绑包。目录结构如下:vendor/prismic/src/Prismic/Fragment/StructuredText.php。文档不太清楚如何用自定义类覆盖 StructuredText 类。文档参考覆盖 Bundle 中的控制器。我正在尝试在 php-sdk 目录中扩展一个类。这是一项服务吗?
    • 这是您使用的捆绑包prismicio
    猜你喜欢
    • 2011-12-31
    • 2012-03-08
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    相关资源
    最近更新 更多