2. Extending the Service Class - modmore/Alpacka GitHub Wiki

In MODX Extras, the service class is a fairly standard PHP class that is used to tie things together. The minimum service class takes a $modx variable and loads some configuration into a local array, but they can also contain utilities and what not.

The service class typically lives in core/components/packagename/model/packagename/packagename.class.php.

With Alpacka, you get a whole bunch of utilities available in your service class, while minimising the boilerplate required. Here's a very simple example of a service class using Alpacka:

<?php
// Require the composer-provided autoloader
require_once dirname(dirname(__FILE__)) . ‘/vendor/autoload.php’;

// Import the Alpacka service class
use modmore\Alpacka\Alpacka;

// Create your service class "PackageName" by extending the Alpacka class
class PackageName extends Alpacka {
    // Set the namespace for automatically grabbing the right configuration
    protected $namespace = 'packagename';

    // Extend the construct function to do your own initialisation logic
    public function __construct($instance, array $config = array())
    {
        // Always start by calling the parent constructor
        parent::__construct($instance, $config);

        // Set the current version (major, minor, patch, release)
        $this->setVersion(1, 2, 3, 'pl');
    }
}

To use the service class, you can use the same $modx->getService method you would use with a standard service class. For example like so:

<?php
$corePath = $modx->getOption('packagename.core_path', null, $modx->getOption('core_path').'components/packagename/');
$service = $modx->getService('packagename', 'PackageName', $corePath . 'model/packagename/');

When you have an instance of the service class, you can start using the Alpacka features.