1. Go to this page and download the library: Download diossystem/multicasting library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
diossystem / multicasting example snippets
namespace App\Models;
use Dios\System\Multicasting\AttributeMulticasting;
use Dios\System\Multicasting\ReadwriteInstance; // to have the access from attributes: $model->instance
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
class Sheet extends Model
{
use AttributeMulticasting, ReadwriteInstance;
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'properties' => 'array',
];
/**
* The instance type of entities.
*
* @var string
*/
protected $interfaceType = \Dios\System\Multicasting\Interfaces\RelatedEntity::class;
/**
* The source that contains an entity type.
*
* @var string
*/
protected $sourceWithEntityType = 'type';
/**
* Type mapping of entity types and their handlers.
*
* @var array
*/
protected $entityTypeMapping = [
'single_type' => App\Models\RelatedSheetTypes\SingleType::class,
'roll_paper_type' => App\Models\RelatedSheetTypes\RollPaperType::class,
];
/**
* The property to read values for entities.
*
* @var string
*/
protected $propertyForEntity = 'properties'; // the table has a column namesd 'properties'
/**
* The state of configuring instances of entities.
*
* @var bool
*/
// protected $configureInstanceOfEntity = true; // by default
/**
* The state of filling instances of entities.
*
* @var bool
*/
// protected $fillInstance = true; // by default
$model = Sheet::where('type', 'single_type')->find($id);
/** @var SingleType $singleType */
$singleType = $model->instance;
$height = $singleType->getHeight();
$topMargin = $singleType->getTopMargin();
$availableHeight = $singleType->getAvailableHeight();
if ($singleType->canContain($customHeight, $customWeight)) {
// actions
}
$singleType->setHeight($newHeight);
$singleType->save();
// The second type
$model = Sheet::where('type', 'roll_paper_type')->find($id);
/** @var RollPaperType $rollPaperType */
$rollPaperType = $model->instance;
$indent = $rollPaperType->getIndent(); // this method does not exist in SingleType
// others methods
if ($rollPaperType->canContain($customHeight, $customWeight)) {
// other actions
}
use Dios\System\Multicasting\AttributeMulticasting;
class Sheet extends Model
{
use AttributeMulticasting;
// your code
}
/** @var MulticastingEntity|SingleValueEntity **/
$instance = $model->getInstance();
$instance->setValue($value);
/** @var mixed $value **/
$value = $instance->getValue(); // returns any value
/** @var MulticastingEntity|KeepsEntityType **/
$instance = $model->getInstance();
/** @var string $type **/
$type = $instance->getEntityType();
// A type is assigned during initialization, if it is configured
$instance->setEntityType($this->getEntityType()); // it is called from the model
/** @var MulticastingEntity|KeepsAttributeName **/
$instance = $model->getInstance();
/** @var string $name **/
$name = $instance->getAttributeName();
// A name is assigned during initialization, if it is configured
$instance->setAttributeName($this->{$this->propertyForEntity}); // it is called from the model
use Dios\System\Multicasting\Interfaces\SimpleArrayEntity;
/**
* The instance type of entities.
*
* @var string
*/
protected $interfaceType = SimpleArrayEntity::class;
}
use App\Models\EntitiesOfSheets\TypeOfSheet; // your own interface
use Illuminate\Database\Eloquent\Model;
class Sheet extends Model
{
use AttributeMulticasting {
// Set another name to the function of the trait
newInstanceByClassNameOfEntity as newInstanceFromTrait;
}
/**
* The instance type of entities.
*
* @var string
*/
protected $interfaceType = TypeOfSheet::class;
/**
* Makes a new instance of a class using the interface type
* and a class name of the entity.
*
* @param string $className
* @return MulticastingEntity|null
*/
public function newInstanceByClassNameOfEntity(string $className)
{
/** @var string $interfaceType **/
$interfaceType = $this->getInterfaceTypeOfEntities();
if ($interfaceType === TypeOfSheet::class) {
// The custom interface and atypical arguments are used here
$instance = new $className($this->height, $this->height);
} else {
// In another case there will be call a function from the trait
$instance = $this->newInstanceFromTrait($className);
}
}
}
use App\Models\EntitiesOfSheets\KeepsSize; // your own interface
use Illuminate\Database\Eloquent\Model;
class Sheet extends Model
{
use AttributeMulticasting {
// Set another name to the function of the trait
fillInstanceOfEntity as fillInstanceInTrait;
}
/**
* Fills an instance of the entity with data from the property.
*
* @param MulticastingEntity $instance
* @return MulticastingEntity
*/
public function fillInstanceOfEntity(MulticastingEntity $instance): MulticastingEntity
{
// Sets values from the model
if ($instance instanceof KeepsSize) {
$instance->setSize($this->height, $this->width);
// or
$instance->setHeight($this->height);
$instance->setWidth($this->width);
}
// Uses the function of the trait
$this->fillInstanceInTrait();
}
}
/**
* The source that contains an entity type.
* When set second value, then may to use caching of a result of the search
* entity key.
*
* Format that uses the cache: '<first_value>|<second_value>'
* The first_value is a path to get an entity key.
* The second_value is a key for the cache.
* Example: 'af.type|additional_field_id'
*
* Format that do not use the cache: '<value>'.
* The value is a path to get an entity key or it is a property of the current model.
* Example: 'code_name'
*
* @var string
*/
protected $sourceWithEntityType = 'af.type|additional_field_id';
}
/**
* Type mapping of entity types and their handlers.
*
* @var array
*/
protected $entityTypeMapping = [
'map' => \Dios\System\Page\Models\HandlersOfAdditionalFields\Map::class,
];
/**
* A default entity handler class.
*
* @var string|null
*/
protected $defaultEntityHandler = \Dios\System\Page\Models\HandlersOfAdditionalFields\DefaultHandler::class;
}
/**
* The property that contains values for entities.
*
* @var string
*/
protected $propertyForEntity = 'values';
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'values' => 'array',
];
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.