Skip to content

Advanced Usage ​

Middlewares ​

before() runs a callback before each request:

php
use Innobrain\OnOfficeAdapter\Facades\BaseRepository;
use Innobrain\OnOfficeAdapter\Dtos\OnOfficeRequest;
use Innobrain\OnOfficeAdapter\Enums\OnOfficeAction;
use Innobrain\OnOfficeAdapter\Enums\OnOfficeResourceType;

BaseRepository::query()
    ->before(function (OnOfficeRequest $request) {
        // Add a parameter dynamically
        $request->parameters['someDynamicKey'] = 'someValue';
    })
    ->call(
        new OnOfficeRequest(
            OnOfficeAction::Read,
            OnOfficeResourceType::Estate,
        )
    );

TIP

Multiple before() calls run in order.

Custom Endpoints with BaseRepository ​

BaseRepository sends any request:

php
use Innobrain\OnOfficeAdapter\Facades\BaseRepository;
use Innobrain\OnOfficeAdapter\Dtos\OnOfficeRequest;
use Innobrain\OnOfficeAdapter\Enums\OnOfficeAction;

$results = BaseRepository::query()
    ->call(new OnOfficeRequest(
        OnOfficeAction::Read,
        'customResource' // string resource types are accepted
    ));

Debugging ​

php
// Dump the request without stopping execution
BaseRepository::query()->dump()->call(...);

// Dump the raw request payload, then exit
BaseRepository::query()->raw()->call(...);

// Record requests and responses
BaseRepository::record();
BaseRepository::query()->call(...);
$lastPair = BaseRepository::lastRecorded();

raw() and dd() call exit(1) after dumping. dump() lets the request complete.

Chunked Reads ​

each() processes one page per callback:

php
EstateRepository::query()
    ->each(function (array $estates) {
        foreach ($estates as $estate) {
            // Process chunk
        }
    });

WARNING

Each chunk requests the next page automatically. A failed page throws OnOfficeException. Chunks already passed to the callback are not rolled back.

Extending the Adapter ​

Extend Builder and BaseRepository for a custom endpoint:

php
use Illuminate\Support\Collection;
use Innobrain\OnOfficeAdapter\Query\Builder;
use Innobrain\OnOfficeAdapter\Repositories\BaseRepository;

class MySpecialBuilder extends Builder
{
    public function fetchSomething(): Collection
    {
        // custom logic here
    }
}

class MySpecialRepository extends BaseRepository
{
    protected function createBuilder(): MySpecialBuilder
    {
        return new MySpecialBuilder();
    }
}

Custom repositories get faking, chunking, and debugging from the base classes.

Released under the MIT License.