2013-07-30 1 views
1

Я построил приложение PHP, которое использует пространства имен и автозагрузку PSR-0. При попытке реализовать библиотеку Stripe я обнаружил, что она не может загружать классы, потому что они не помещаются в имена. Есть ли способ не автозагрузки, если я вручную включил файлы?Stripe Payments в PHP с пространствами имен

// Get Stripe Library 
require_once(App\App::$APP_PATH . "/Extensions/Stripe.php"); 

// Set Key 
Stripe::setApiKey($stripe['secret_key']); 

Установка ключа в примере завершается с фатальной ошибкой, потому что он думает Stripe класса в моем пространстве имен текущего файла существует.

Я обнаружил, что если я добавлю строку use Stripe; ниже моего объявления пространства имен, она будет работать, но затем завершится сбой в следующем классе в библиотеке Stripe.

Мне действительно нужно добавить строку Use Stripe, Stripe_Customer, Stripe_xyz...;, чтобы она могла правильно загружать файлы (что более 25 файлов), или есть лучший способ?

[EDIT]

Пока я не слышал, есть ли лучший способ, я сделал это:

// Import Non-Namespaced Stripe Library 
use Stripe, Stripe_Account, Stripe_ApiConnectionError, Stripe_ApiError, Stripe_ApiRequestor, Stripe_ApiResource, Stripe_AuthenticationError; 
use Stripe_Card, Stripe_CardError, Stripe_Charge, Stripe_Coupon, Stripe_Customer, Stripe_Error, Stripe_Event, Stripe_InvalidRequestError; 
use Stripe_Invoice, Stripe_InvoiceItem, Stripe_List, Stripe_Object, Stripe_Plan, Stripe_Recipient, Stripe_SingletonApiResource; 
use Stripe_Stripe, Stripe_Token, Stripe_Transfer, Stripe_Util; 

ответ

0

Вы можете использовать \, чтобы указать, что имя класса вы указываете является FQNS, например:

<?php 
use \Stripe, \Stripe_Account; 

$stripe = new Stripe(); 
$stripe_account = new Stripe_Account(); 

или без use заявления:

<?php 
$stripe = new \Stripe(); 
$stripe_account = new \Stripe_Account(); 
+0

Как это лучше, чем то, что я делал? Вы предполагаете, что я в основном делаю то же самое, что и в случае с префиксом namespacing. Это действительно требует больше работы. –

+0

Я только предлагал решение вашей проблемы: «Мне действительно нужно добавить« Использовать Stripe, Stripe_Customer, Stripe_xyz ...; 'line»? – rcambrj

0

Использование композитора это самый простой способ (я обещаю!)

Просто install composer, а затем install stripe. После того, как вы установили их, просто перейдите в папку вашего проекта и запустите composer install. Это установит необходимые зависимости и поместит композитор в папку с именем vendor.

Тогда вам просто нужен файл autoload.php, который будет загружать полосу, не пытаясь использовать пространство имен. Вот полный примерный блок, который я grabbed from here.

<?php 
require_once('vendor/autoload.php'); 

$stripe = array(
    "secret_key"  => "sk_test_BQokikJOvBiI2HlWgH4olfQ2", 
    "publishable_key" => "pk_test_6pRNASCoBOKtIshFeQd4XMUh" 
); 

\Stripe\Stripe::setApiKey($stripe['secret_key']); 
?>