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_classDataModel_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:
  • $class
    Zájmová třída reprezentována instancí PHP třídy ReflectionClass
  • $attribute_name
    Název požadovaného atributu tak, jak s ním operuje PHP8. Tedy prakticky se jedná o názvy tříd, například: Jet\Config_Definition, Jet\DataModel_Definition, Jet\Form_Definition a případě další (např. vaše) třídy.
public static getClassDefinition(
ReflectionClass $class,
string $attribute_name,
array $aliases=[]
): array
Vrátí pole obsahující definice parametrů dané třídy.

Parametry:
  • $class
    Zájmová třída reprezentována instancí PHP třídy ReflectionClass
  • $attribute_name
    Název požadovaného atributu tak, jak s ním operuje PHP8. Tedy prakticky se jedná o názvy tříd, například: Jet\Config_Definition, Jet\DataModel_Definition, Jet\Form_Definition a případě další (např. vaše) třídy.
  • $aliases
    Přemapování parametrů. Například DataModel přemapovává definice klíčů z jednotlivých parametrů. Například z definice jedné vnější relace 'relation' udělat pole 'relations'.
Předchozí kapitola
Jet\Mailing_Email_File
Další kapitola
Dependency Injection v Jet