class MyDataObject extends DataObject { private static $extensions = [ 'HelperExtension', 'FormatterExtension' ]; }
class PhotoAlbum extends DataObject { private static $db = [ 'Title' => 'Varchar' ]; private static $has_many = [ 'Photos' => 'Photo' ]; } class Photo extends DataObject { private static $db = [ 'Title' => 'Varchar', 'Description' => 'Text' ]; private static $has_one = [ 'PhotoAlbum' => 'PhotoAlbum' ]; } class PhotoGalleryExtension extends DataExtension { private static $has_many = [ 'GalleryPhotos' => 'Photo' ]; public function onBeforeWrite() { parent::onBeforeWrite(); // Add all photos from the album to the gallery $photos = $this->owner->Photos(); foreach ($photos as $photo) { $this->owner->GalleryPhotos()->add($photo); } } } // Add the extension to the PhotoAlbum class PhotoAlbum::add_extension('PhotoGalleryExtension');
class Product extends DataObject { private static $db = [ 'Title' => 'Varchar', 'Price' => 'Currency' ]; } class DiscountExtension extends DataExtension { private static $db = [ 'Discount' => 'Percentage' ]; public function newPrice() { $discount = $this->owner->Discount; $price = $this->owner->Price; // Calculate the new price with the discount return $price - ($price * ($discount / 100)); } } // Add the extension to the Product class Product::add_extension('DiscountExtension');In this example, we have a `Product` class with a `Price` field. We want to add a discount to the product, so we add a new `DiscountExtension` class that adds a new `Discount` field to the product and a new `newPrice` method that calculates the new price with the discount. Package library: SilverStripe ORM