2017-01-31 1 views
1
(I 일반적으로 권장) 신선한 스카치 상자 https://box.scotch.io/

누락 클래스

이 작곡가 : https://github.com/silverstripe/silverstripe-omnipay

에서

{ 
    "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": "[email protected]" 
    }, 
    "extra": { 
     "branch-alias": { 
      "3.x-dev": "3.5.x-dev" 
     } 
    }, 
    "config": { 
     "process-timeout": 600 
    }, 
    "prefer-stable": true, 
    "minimum-stability": "dev" 
} 

그리고 payment.yml를 사용 Silverstripe이 지불을 구축 그러나 Omnipay 수업은 포함되어 있지 않습니다. Omnipay를 문제없이 SS로 사용했습니다.

아무도 모르게됩니다.

+0

'composer install'을 실행 한 후에는'omnipay' 폴더 (silverstripe-omnipay 모듈)가 있어야하며 phpleague omnipay 클래스는'vendor'에 있어야합니다 ... 그렇지 않은가요? – bummzack

+0

예 @bummzack, 모든 파일이 있습니다. 그들 중 누구의 상단에 에코는 아무것도하지 않으며, 그들은 무시 당하고 있습니다. 권한이나 정책 또는 뭔가인지 알 수 있도록 ClassManifest의 프로세스를 추적 할 수있는 방법을 기대했습니다 ... 방금 막상했습니다. –

+0

실패한 예제 코드와 해당 코드를 실행할 때 나타나는 오류 메시지를 게시 할 수 있습니까? – bummzack

답변

0

silverstripe-omnipay은 많은 파일에 대해 php namespaces을 사용합니다. ServiceFactory가 그 중 하나 일 뿐이므로 SilverStripe이 포함 할 올바른 파일을 찾으려면 사용자가 의도하는 파일의 맨 위에 사용을 지정해야합니다 ServiceFactory를 사용하십시오.

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

이 SilverStripe을 위해 만든 모듈은 거의 FO 네임 스페이스와 silverstripe - omnipay의 사용을하지 않기 때문에 완전히 명확하지 않다 ServiceFactory이 예에서 네임 스페이스되는 언급을하지 않습니다.

0

어떤 오류가 발생합니까? 수업에 어떻게 접근하려고합니까?

당신은 당신이 명령 줄에서 다음을 실행해야합니다

<?php 
use Omnipay\Omnipay; 

class PaymentPage extends Page 
{ 
    function ... 
    { 
     try { 
      $response = $gateway->purchase([... 
    } 
} 
+0

다른 구현에서는 필요하지 않은 "Omnipay \ Omnipay 사용"을 포함하므로 "치명적인 오류 : Class 'ServiceFactory'not found"와 같은 오류가 발생합니다 - Silverstripe-Omnipay없이 Omnipay를 사용하는 것처럼 보입니다. 왜냐하면 우리는 Omnipay를 직접적으로 호출하지 않기 때문에 SS "Payment"및 "PurchaseService"클래스를 통해서만 호출하기 때문입니다. –

+0

예, 진지하게. composer.json을 수동으로 해킹하는 대신에 composer require를 사용하면 아마도이 문제가 해결 될 것입니다. 그것이 다른 것이라면 같은 문제가있는 다른 사람들과 포럼에서 볼 수 있습니다. (나는 생각해 보지 못했지만, 문제가 해결되지 않으면 오랜 시간이 걸릴 것 같지 않습니다. – theruss

1

합니다 (Omnipay 버전에 따라)이 같은 클래스를 호출 할 수 있어야한다 : 또한

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

을 항상 SS 캐쉬의 내용을 날려 버리는 것만으로도 가치가 있습니다. (예 : Vagrant를 사용하고 있습니다. Dev env라고 가정합니다.)/memcache가 아닌 F/S를 사용하고 있다면/tmp에 있습니다. dev/build를 다시 실행합니다. 이렇게하면 캐시를 지우고 다시 작성하고 SS에서 사용 가능한 모든 새 클래스에 대해 알려줍니다.

+0

안녕하세요, @theruss, 신선한 Vagrant 상자에서 일어난 일입니다. 그래서 어떻게 캐시 될지 모르겠습니다 ... 명령입니다. dev/build flush = URL을 통해 호출하는 것과는 다른 모든 것? 여러 번 했 ... –

+1

OK, 캐시를 깨끗하게 설정 했으므로 작성자 설치를 실행했지만 작성자 업데이트를 실행 했습니까?composer install을 실행하면 composer.lock 파일의 내용을 사용하지만 composer.lock은 composer 업데이트를 실행하지 않는 한 omnipay 패키지 데이터로 업데이트되지 않습니다. 아직 composer.json을 수동으로 편집하지 않는 것이 좋습니다. 대신 작곡가를 사용하는 것이 더 좋으며 /이 필요합니다. – theruss

관련 문제