How To Integrate Namespaced Library Into Yii

Hi, I’m relatively new to PHP and Yii. I want to integrate the rest-api-sdk-php library from PayPal (github.com/paypal/rest-api-sdk-php) into my Yii project. Here is the article that shows me how to do it http://shiki.me/blog/autoloading-namespaced-libraries-in-yii-framework/

Here is the screenshot of my files structure

The original sample code to get a payment detail looks like this


<?php

// # GetPaymentSample

// This sample code demonstrate how you can

// retrieve a list of all Payment resources

// you've created using the Payments API.

// Note various query parameters that you can

// use to filter, and paginate through the

// payments list.

// API used: GET /v1/payments/payments


require __DIR__ . '/../bootstrap.php';

use PayPal\Api\Payment;


$paymentId = "PAY-0XL713371A312273YKE2GCNI";


// ### Retrieve payment

// Retrieve the payment object by calling the

// static `get` method

// on the Payment class by passing a valid

// Payment ID

// (See bootstrap.php for more on `ApiContext`)

try {

	$payment = Payment::get($paymentId, $apiContext);

} catch (\PPConnectionException $ex) {

	echo "Exception:" . $ex->getMessage() . PHP_EOL;

	var_dump($ex->getData());

	exit(1);

}

?>

<html>

<body>

	<div>Retrieving Payment ID: <?php echo $paymentId;?></div>

	<pre><?php var_dump($payment->toArray());?></pre>

	<a href='../index.html'>Back</a>

</body>

</html>



And here is my code inside PaymentController


<?php


use PayPal\Rest\ApiContext;

use PayPal\Auth\OAuthTokenCredential;

use PayPal\Api\Payment;


class PaymentController extends APIController

{

	

	public function actionIndex() 

	{


		Yii::setPathOfAlias('PayPal',Yii::getPathOfAlias('application.components.modules.paypal.vendor.paypal'));

		

		$apiContext = new PayPal\Rest\ApiContext(new PayPal\Auth\OAuthTokenCredential(

		'EBWKjlELKMYqRNQ6sYvFo64FtaRLRR5BdHEESmha49TM',

		'EO422dn3gQLgDbuwqTjzrFgFtaRLRR5BdHEESmha49TM'));

		

		$paymentId = "PAY-0XL713371A312273YKE2GCNI";

		

		$payment = PayPal\Api\Payment::get($paymentId, $apiContext);

		

		var_dump($payment);

	}

}

Basically, I don’t know what I’m doing. Nothing happens from the code above. Is there any other article that I should read?

Thank you very much.

What does it mean that nothing happens? What happens when you call that action? Is there an error or a blank page? Did you checked your application and http server logs? Do you have YII_DEBUG enabled?

It says




include(/Users/sangprabo/Sites/test/protected/components/modules/paypal/vendor/paypal/Rest/ApiContext.php): failed to open stream: No such file or directory



So I changed the PathOfAlias from




Yii::setPathOfAlias('PayPal',Yii::getPathOfAlias('application.components.modules.paypal.vendor.paypal'));



into




Yii::setPathOfAlias('PayPal',Yii::getPathOfAlias('application.components.modules.paypal.vendor.paypal.rest-api-sdk-php.lib.PayPal'));



And the error message changes :


include(/Users/sangprabo/Sites/test/protected/components/modules/paypal/vendor/paypal/rest-api-sdk-php/lib/PayPal/Common/PPApiContext.php): failed to open stream: No such file or directory



I’m not sure what I’m doing…

I already solve the problem, I will post the answer soon… Thank you for your response nineinchnick

EDIT :

Here is the complete code of PaymentController.php




<?php


use PayPal\Rest\ApiContext;

use PayPal\Auth\OAuthTokenCredential;

use PayPal\Api\Payment;


class PaymentController extends APIController

{


	public function init()

	{

		

	}

	

	public function actionIndex()

	{

		require_once(Yii::getPathOfAlias('application.components.modules.paypal') . '/bootstrap.php');

                

		$apiContext = new ApiContext(new OAuthTokenCredential(

		'EBWKjlELKMYqRNQ6sYvFo64FtaRLRR5BdHEESmha49TM',

		'EO422dn3gQLgDbuwqTjzrFgFtaRLRR5BdHEESmha49TM'));


		$paymentId = "PAY-0XL713371A312273YKE2GCNI";


		$payment = Payment::get($paymentId, $apiContext);


		var_dump($payment);

          }

}