Objects and class fallback
Custom classes
You can use a custom class for any types, by specifying the wanted class name.
<?php
// packages/Acme/etc/config.php
$config = [
Core_Page::TYPE => [ // Type
'contact' => [ // Identifier
'class' => Acme_Page_Contact::class,
],
],
Core_Block::TYPE => [ // Type
'banner' => [ // Identifier
'class' => Acme_Block_Banner::class,
],
],
Core_Model::TYPE => [ // Type
'customer' => [ // Identifier
'class' => Acme_Model_Customer::class,
],
],
];
To create an instance of an object, you need to use the App::getSingleton or App::getObject methods:
App::getSingleton({identifier}, {type}, {package}) (Create a single instance)
App::getObject({identifier}, {type}, {package}) (Create a new instance)
<?php
/** @var Acme_Model_Customer $model */
$model = App::getSingleton('customer', Core_Model::TYPE);
// packages/Acme/Model/Customer.php
/** @var Admin_Model_Customer $model */
$model = App::getSingleton('customer', Core_Model::TYPE, 'admin');
// packages/Admin/Model/Customer.php
Class fallback priorities
If the class is missing, the system will automatically attempt to load a class based on the following priorities:
- {package}_{type}_{identifier}
- Core_{type}_{identifier}
- {package}_{type}
- Core_{type}
- DataObject
Overrides
To override default core objects like Core_Block or Core_Page, add the class to the root of your package:
packages > Acme > Page.php
<?php
declare(strict_types=1);
class Acme_Page extends Core_Page
{
public function myCustomMethod(): string
{
return 'Hello World!';
}
}
Your class methods will now be available for all pages.
In the same way for the blocks:
packages > Acme > Block.php
<?php
declare(strict_types=1);
class Acme_Page extends Core_Block
{
public function myCustomMethod(): string
{
return 'Hello World!';
}
}
Your class methods will now be available for all blocks.
Fallback examples
For a block type, with banner identifier, in the Acme package.
App::getSingleton('banner', Core_Block::TYPE)
The system will try to load classes in this order until it is found:
- Acme_Block_Banner
- Core_Block_Banner
- Acme_Block
- Core_Block
- DataObject
For a model type, with customer identifier, in the Acme package.
App::getSingleton('customer', Core_Model::TYPE)
The system will try to load classes in this order until it is found:
- Acme_Model_Customer
- Core_Model_Customer
- Acme_Customer
- Core_Customer
- DataObject
- Installation
- Configuration
- Add a new package
- Add a new HTML page
- Serve any type of file
- Rewrite a route
- Add a new block
- Data assignment
- Objects and class fallback
- Database
- Console Commands
- Framework tools
- Custom shared libraries
- External libraries with composer
- Templating best practices
- Forms
- Captcha
- Write content in Markdown
- Static Site Generator