【问题标题】:Missing Classes from Silverstripe OmnipaySilverstripe Omnipay 缺课
【发布时间】:2017-06-17 11:26:56
【问题描述】:

在一个新鲜的苏格兰威士忌盒子https://box.scotch.io/(我一般推荐)

和这位作曲家:

{
    "name": "silverstripe/installer",
    "description": "The SilverStripe Framework Installer",
    "require": {
        "php": ">=5.3.3",
        "silverstripe/cms": "3.5.1",
        "silverstripe/framework": "3.5.1",
        "silverstripe/reports": "3.5.1",
        "silverstripe/siteconfig": "3.5.1",
        "silverstripe-themes/simple": "3.1.*",
        "silverstripe/silverstripe-omnipay": "^2.1",
        "omnipay/paymentexpress": "^2.2",
        "firebase/php-jwt": "^4.0"
    },
    "require-dev": {
        "phpunit/PHPUnit": "~3.7@stable"
    },
    "extra": {
        "branch-alias": {
            "3.x-dev": "3.5.x-dev"
        }
    },
    "config": {
        "process-timeout": 600
    },
    "prefer-stable": true,
    "minimum-stability": "dev"
}

并使用来自https://github.com/silverstripe/silverstripe-omnipay的payment.yml

Silverstripe 构建 Payments,但不包含任何 Omnipay 类。我之前在 SS 中使用过 Omnipay,没有任何问题。

有人知道怎么回事吗?

【问题讨论】:

  • 在你做composer install之后,应该有一个omnipay文件夹(silverstripe-omnipay模块)并且phpleagueomnipay类应该在vendor...不是这样吗?
  • 是的@bummzack,所有文件都在那里。在它们中的任何一个顶部回响都不会做任何事情,它们被忽略了。我曾希望有一种方法可以跟踪 ClassManifest 的构建过程,这样我就可以查看它是权限还是策略或其他什么……只是难住了。
  • 您能否发布一些失败的示例代码以及运行该代码时收到的错误消息?

标签: silverstripe omnipay


【解决方案1】:

确保在命令行上运行以下命令:

$> ./framework/sake dev/build flush=all

如果你使用的是 F/S 而不是 memcache 或一些这样的,然后再次运行开发/构建。这将清除和重建您的缓存,并在此过程中告诉 SS 其可用的所有新类。

【讨论】:

  • 嘿@theruss,这发生在一个新的 Vagrant 盒子上,所以我不确定如何缓存任何东西......命令行 dev/build flush=all 与通过 URL 调用它有什么不同吗?做了好几次了……
  • 好的,所以我们已经确定你有一个清晰的缓存,你已经运行了 composer install,但是你运行了 composer update 吗?当您运行 composer install 时,它会获取 composer.lock 文件的内容,但除非您运行 composer update,否则 composer.lock 不会使用您的 omnipay 包数据进行更新。最好不要手动编辑 composer.json ,而是使用 composer require /.
【解决方案2】:

silverstripe-omnipay 对它的许多文件使用php namespaces,恰好 ServiceFactory 是其中之一,因此为了让 SilverStripe 找到要包含的正确文件,您必须在文件顶部指定其用途您打算使用 ServiceFactory。

<?php use SilverStripe\Omnipay\Service\ServiceFactory; ...

这并不完全明显,因为为 SilverStripe 制作的模块很少使用命名空间 fo,而且 silverstripe-omnipay 在其示例中没有提到 ServiceFactory 是命名空间。

【讨论】:

    【解决方案3】:

    你得到什么错误?以及您是如何尝试访问这些课程的?

    您应该能够像这样调用类(取决于 Omnipay 版本)

    <?php
    use Omnipay\Omnipay;
    
    class PaymentPage extends Page
    {
        function ...
        {
            try {
                $response = $gateway->purchase([...
        } 
    }
    

    【讨论】:

    • 我收到诸如“致命错误:未找到类'ServiceFactory'”之类的错误-您的示例看起来像是在使用没有 Silverstripe-Omnipay 的 Omnipay,因为您包括“使用 Omnipay\Omnipay”,它没有'在我的其他实现中没有必要,因为我们从不直接调用 Omnipay,而只是通过 SS“Payment”和“PurchaseService”类。
    • 是的,认真的。使用 composer require 而不是手动修改 composer.json 可能会解决这个问题。如果是其他问题,您会在论坛上看到它,其他人也有同样的问题。 (我还没有考虑过,但这样的问题不太可能会持续很长时间而不得到解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 2016-03-07
    • 2018-06-23
    • 2016-11-15
    • 2014-03-29
    相关资源
    最近更新 更多