PHPackages                             aybarsm/laravel-pandle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. aybarsm/laravel-pandle

ActiveLibrary[API Development](/categories/api)

aybarsm/laravel-pandle
======================

Highly customisable Laravel service provider package for Pandle (pandle.com) bookkeeping platform API.

v1.0.3(1y ago)03MITPHPPHP ^8.3

Since Jan 18Pushed 1y ago1 watchersCompare

[ Source](https://github.com/aybarsm/laravel-pandle)[ Packagist](https://packagist.org/packages/aybarsm/laravel-pandle)[ Docs](https://github.com/aybarsm/laravel-pandle)[ RSS](/packages/aybarsm-laravel-pandle/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (6)Versions (5)Used By (0)

Laravel Pandle
==============

[](#laravel-pandle)

A highly customizable Laravel service provider package for the Pandle (pandle.com) bookkeeping platform API.

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require aybarsm/laravel-pandle
```

Configuration
-------------

[](#configuration)

Publish the configuration file:

```
php artisan vendor:publish --provider="Aybarsm\Laravel\Pandle\PandleServiceProvider"
```

Add the following environment variables to your `.env` file:

```
# Pandle E-Mail
PANDLE_EMAIL=your-pandle-email
# Pandle Password
PANDLE_PASSWORD=your-pandle-password
# Pandle Base URL (optional, defaults to https://my.pandle.com/api/v1)
PANDLE_BASE_URL=https://my.pandle.com/api/v1
# Pandle Default Company ID (optional, defaults to null)
# If set, the package will use this company ID for company-specific operations.
# However, $client->company(123456) will create a new company instance for the given ID (123456).
PANDLE_COMPANY_ID=your-company-id
# Cache is being used to store access tokens.
# Cache is always encrypted.
# Cache Enabled
PANDLE_CACHE_ENABLED=false
# Cache Store
PANDLE_CACHE_STORE=database
# Cache Key
PANDLE_CACHE_KEY=pandle
```

Usage
-----

[](#usage)

### Basic Usage

[](#basic-usage)

```
use Aybarsm\Laravel\Pandle\Contracts\ClientContract as PandleClient;

class YourController extends Controller
{
    public function __construct(protected PandleClient $pandle) {}

    public function index()
    {
        // Get authenticated user info
        $me = $this->pandle->me();

        // Get company instance
        $company = $this->pandle->company(123456);

        // Get bank accounts
        $bankAccounts = $company->getBankAccounts();

        // Get customers
        $customers = $company->getCustomers();
    }
}
```

Architecture &amp; Design
-------------------------

[](#architecture--design)

### Dependency Injection

[](#dependency-injection)

This package implements a clean dependency injection pattern with no circular dependencies. All concrete implementations are referenced through their corresponding interfaces (abstracts):

```
use Aybarsm\Laravel\Pandle\Contracts\ClientContract;
use Aybarsm\Laravel\Pandle\Contracts\HandlerContract;
use Aybarsm\Laravel\Pandle\Contracts\CompanyContract;
use Aybarsm\Laravel\Pandle\Contracts\AccessTokenContract;

// Example of clean DI in action
class Company implements CompanyContract
{
    public function __construct(
        protected ClientContract $client
    ) {}
}
```

This architectural decision provides several key benefits:

1. **Performance**: No circular dependencies means faster instantiation and reduced memory usage
2. **Testability**: Easy to mock dependencies for unit testing
3. **Maintainability**: Clear separation of concerns and dependencies
4. **Flexibility**: Simple to replace any component without affecting others
5. **Reliability**: Prevents complex dependency chains that can lead to runtime issues

Customisation
-------------

[](#customisation)

The concretes in this package are not extensible. However, the package is designed to be highly customisable. All core components can be replaced with your own implementations by binding them before the PandleServiceProvider registers its defaults.

```
