Atributy - Jet\Attributes
Třída Jet\Attributes je jednoduchá fasáda pro práci a atributy (PHP 8) tříd a jejich vlastností. Atributy jsou primárně využívány pro definice DataModel, aplikační konfigurace a formulářů. Jen pro zajímavost uvedu, že Jet využíval atributů pro definice již před příchodem PHP8 a měl vlastní parser, ale to co nabízí PHP8 je rozhodně lepší :-)
Pokud ještě nejste seznámeni s problematikou atributů v PHP8, pak se prosím koukněte do dokumentace PHP. Implementace atributů v PHP je již velice dobrá a Jet potřebuje doplnit pouze dědičnost a přetěžování atributů.
Co to znamená? Opět si to ukažme rovnou na reálném příkladu. V ukázkové aplikaci naleznete abstraktní třídu JetApplication\Logger_Event, která je DataModel reprezentující obecný záznam události, má většinu potřebných definic, vlastností a metod:
namespace JetApplication;
use Jet\DataModel;
use Jet\DataModel_Definition;
use Jet\DataModel_IDController_AutoIncrement;
// ... ... ... ...
#[DataModel_Definition(
name: 'logger_event',
id_controller_class: DataModel_IDController_AutoIncrement::class,
id_controller_options: ['id_property_name' => 'id']
)]
abstract class Logger_Event extends DataModel
{
// ... ... ... ...
}
Ovšem jedná se o abstraktní třídu. Navíc nemá definovaný například název databázové tabulky, kam se budou události fakticky ukládat. Od této třídy dědí několik dalších tříd. Například JetApplication\Logger_Admin_Event:
namespace JetApplication;
use Jet\DataModel_Definition;
#[DataModel_Definition(
database_table_name: 'events_administration'
)]
class Logger_Admin_Event extends Logger_Event
{
}
Jak je vidět, tak v ukázkové implementaci třída vše dědí a pouze doplňuje definici názvu databázové tabulky. Všechny ostatní definice jsou zděděny od rodičovské třídy. Samozřejmě je možné parametry rodičovské třídy přetížit. To je smyslem třídy Jet\Attributes.
Přehled metod
Metoda | Význam |
---|---|
public static getClassPropertyDefinition( ReflectionClass $class, string $attribute_name ): array |
Vrátí pole obsahující definice všech parametrů vlastností (majících příslušné definice) dané třídy. Parametry:
|
public static getClassDefinition( ReflectionClass $class, string $attribute_name, array $aliases=[] ): array |
Vrátí pole obsahující definice parametrů dané třídy. Parametry:
|