Extend existing Objects or filter which objects are synchronized.
Extensions add fields to existing Objects without modifying the native connector code. This is essential for:
You can create multiple extensions for the same object type. Each extension manages its own fields independently.
<?php
namespace Splash\Local\Objects\Extensions;
use Splash\Core\Components\FieldsFactory;
use Splash\Core\Dictionary\SplFields;
use Splash\Core\Interfaces\Extensions\ObjectExtensionInterface;
class ThirdPartyExtension implements ObjectExtensionInterface
{
/**
* Which object types this extension applies to
*/
public function getExtendedTypes(): array
{
return array("ThirdParty");
}
/**
* Add fields to the object
*/
public function buildExtendedFields(string $objectType, FieldsFactory $factory): void
{
$factory->create(SplFields::VARCHAR)
->identifier("custom_field")
->name("Custom Field")
->group("Custom Data")
;
}
/**
* Read field values
*
* [@return](https://github.com/return) null|bool null = not managed, false = error, true = success
*/
public function getExtendedFields(object $object, string $fieldId, &$fieldData): ?bool
{
switch ($fieldId) {
case "custom_field":
$fieldData = $object->getCustomField();
return true;
}
return null; // Field not managed by this extension
}
/**
* Write field values
*
* [@return](https://github.com/return) null|bool null = not managed, false = unchanged, true = changed
*/
public function setExtendedFields(object $object, string $fieldId, $fieldData): ?bool
{
switch ($fieldId) {
case "custom_field":
if ($object->getCustomField() !== $fieldData) {
$object->setCustomField($fieldData);
return true; // Changed
}
return false; // Unchanged
}
return null; // Field not managed by this extension
}
}
| Method | Purpose |
|---|---|
getExtendedTypes() |
Return array of object types to extend |
buildExtendedFields() |
Add field definitions using FieldsFactory |
getExtendedFields() |
Read field values |
setExtendedFields() |
Write field values |
For getExtendedFields():
null - Field not managed by this extensionfalse - Field managed but reading failedtrue - Field read successfullyFor setExtendedFields():
null - Field not managed by this extensionfalse - Field managed but unchangedtrue - Field changedFilters prevent specific objects from being synchronized. Use cases:
<?php
namespace Splash\Local\Objects\Filters;
use Splash\Core\Interfaces\Extensions\ObjectFilterInterface;
class DraftOrderFilter implements ObjectFilterInterface
{
/**
* Which object types this filter applies to
*/
public function getFilteredTypes(): array
{
return array("Order");
}
/**
* Check if object should be filtered (excluded)
*
* [@return](https://github.com/return) bool true = filtered (excluded), false = allowed
*/
public function isFiltered(string $objectType, string $objectId, ?object $object): bool
{
//====================================================================//
// Load object if not provided
if (!$object) {
$object = $this->orderRepository->find($objectId);
}
//====================================================================//
// Exclude draft orders
if ($object && "draft" === $object->getStatus()) {
return true;
}
return false;
}
}
| Method | Purpose |
|---|---|
getFilteredTypes() |
Return array of object types to filter |
isFiltered() |
Return true to exclude object, false to allow |
When an object is filtered:
objectsList() resultsPlace extensions and filters in dedicated namespaces:
Splash/Local/Objects/
├── Extensions/
│ ├── ThirdPartyExtension.php
│ └── ProductExtension.php
└── Filters/
├── DraftOrderFilter.php
└── TestDataFilter.php
How can I help you explore Laravel packages today?