Salta ai contenuti

Classe XoopsObject

La classe XoopsObject è la classe base fondamentale per tutti gli oggetti dati nel sistema XOOPS. Fornisce un’interfaccia standardizzata per la gestione delle proprietà degli oggetti, validazione, tracciamento delle modifiche e serializzazione.

namespace Xoops\Core;
class XoopsObject
{
protected array $vars = [];
protected array $cleanVars = [];
protected bool $isNew = true;
protected array $errors = [];
}
XoopsObject
├── XoopsUser
├── XoopsGroup
├── XoopsModule
├── XoopsBlock
├── XoopsComment
├── XoopsNotification
├── XoopsConfig
└── [Oggetti Moduli Personalizzati]
ProprietàTipoVisibilitàDescrizione
$varsarrayprotectedMemorizza definizioni variabili e valori
$cleanVarsarrayprotectedMemorizza valori bonificati per operazioni database
$isNewboolprotectedIndica se l’oggetto è nuovo (non ancora nel database)
$errorsarrayprotectedMemorizza messaggi validazione e errore
public function __construct()

Crea una nuova istanza XoopsObject. L’oggetto è contrassegnato come nuovo per default.

Esempio:

$object = new XoopsObject();
// L'oggetto è nuovo e non ha variabili definite

Inizializza una definizione di variabile per l’oggetto.

public function initVar(
string $key,
int $dataType,
mixed $value = null,
bool $required = false,
int $maxlength = null,
string $options = ''
): void

Parametri:

ParametroTipoDescrizione
$keystringNome variabile
$dataTypeintCostante tipo dati (vedi Tipi Dati)
$valuemixedValore default
$requiredboolSe il campo è obbligatorio
$maxlengthintLunghezza massima per tipi string
$optionsstringOpzioni aggiuntive

Tipi Dati:

CostanteValoreDescrizione
XOBJ_DTYPE_TXTBOX1Input text box
XOBJ_DTYPE_TXTAREA2Contenuto textarea
XOBJ_DTYPE_INT3Valore integer
XOBJ_DTYPE_URL4Stringa URL
XOBJ_DTYPE_EMAIL5Indirizzo email
XOBJ_DTYPE_ARRAY6Array serializzato
XOBJ_DTYPE_OTHER7Tipo personalizzato
XOBJ_DTYPE_SOURCE8Codice sorgente
XOBJ_DTYPE_STIME9Formato tempo breve
XOBJ_DTYPE_MTIME10Formato tempo medio
XOBJ_DTYPE_LTIME11Formato tempo lungo
XOBJ_DTYPE_FLOAT12Numero floating point
XOBJ_DTYPE_DECIMAL13Numero decimale
XOBJ_DTYPE_ENUM14Enumerazione

Esempio:

class MyObject extends XoopsObject
{
public function __construct()
{
parent::__construct();
$this->initVar('id', XOBJ_DTYPE_INT, null, false);
$this->initVar('title', XOBJ_DTYPE_TXTBOX, '', true, 255);
$this->initVar('content', XOBJ_DTYPE_TXTAREA, '', false);
$this->initVar('email', XOBJ_DTYPE_EMAIL, '', true, 100);
$this->initVar('created', XOBJ_DTYPE_INT, time(), false);
$this->initVar('status', XOBJ_DTYPE_INT, 1, true);
}
}

Imposta il valore di una variabile.

public function setVar(
string $key,
mixed $value,
bool $notGpc = false
): bool

Parametri:

ParametroTipoDescrizione
$keystringNome variabile
$valuemixedValore da impostare
$notGpcboolSe true, valore non da GET/POST/COOKIE

Restituisce: bool - True se successo, false altrimenti

Esempio:

$object = new MyObject();
$object->setVar('title', 'Ciao Mondo');
$object->setVar('content', '<p>Contenuto qui</p>', true); // Non da input utente
$object->setVar('status', 1);

Recupera il valore di una variabile con formattazione opzionale.

public function getVar(
string $key,
string $format = 's'
): mixed

Parametri:

ParametroTipoDescrizione
$keystringNome variabile
$formatstringFormato output

Opzioni Formato:

FormatoDescrizione
's'Show - Entità HTML escapate per visualizzazione
'e'Edit - Per valori input form
'p'Preview - Simile a show
'f'Form data - Raw per elaborazione form
'n'None - Valore raw, nessuna formattazione

Restituisce: mixed - Valore formattato

Esempio:

$object = new MyObject();
$object->setVar('title', 'Ciao <World>');
echo $object->getVar('title', 's'); // "Ciao &lt;World&gt;"
echo $object->getVar('title', 'e'); // "Ciao &lt;World&gt;" (per input value)
echo $object->getVar('title', 'n'); // "Ciao <World>" (raw)
// Per tipi dati array
$object->setVar('options', ['a', 'b', 'c']);
$options = $object->getVar('options', 'n'); // Restituisce array

Imposta più variabili contemporaneamente da un array.

public function setVars(
array $values,
bool $notGpc = false
): void

Parametri:

ParametroTipoDescrizione
$valuesarrayArray associativo di coppie chiave => valore
$notGpcboolSe true, valori non da GET/POST/COOKIE

Esempio:

$object = new MyObject();
$object->setVars([
'title' => 'Mio Titolo',
'content' => 'Mio contenuto',
'status' => 1
]);
// Da database (non input utente)
$object->setVars($row, true);

Recupera tutti i valori variabili.

public function getValues(
array $keys = null,
string $format = 's',
int $maxDepth = 1
): array

Parametri:

ParametroTipoDescrizione
$keysarrayChiavi specifiche da recuperare (null per tutte)
$formatstringFormato output
$maxDepthintProfondità massima per oggetti annidati

Restituisce: array - Array associativo di valori

Esempio:

$object = new MyObject();
// Ottieni tutti i valori
$allValues = $object->getValues();
// Ottieni valori specifici
$subset = $object->getValues(['title', 'status']);
// Ottieni valori raw per database
$rawValues = $object->getValues(null, 'n');

Assegna un valore direttamente senza validazione (usa con attenzione).

public function assignVar(
string $key,
mixed $value
): void

Parametri:

ParametroTipoDescrizione
$keystringNome variabile
$valuemixedValore da assegnare

Esempio:

// Assegnamento diretto da fonte attendibile (ad es. database)
$object->assignVar('id', $row['id']);
$object->assignVar('created', $row['created']);

Bonifica tutte le variabili per operazioni database.

public function cleanVars(): bool

Restituisce: bool - True se tutte le variabili sono valide

Esempio:

$object = new MyObject();
$object->setVar('title', 'Test');
$object->setVar('email', 'user@example.com');
if ($object->cleanVars()) {
// Le variabili sono bonificate e pronte per il database
$cleanData = $object->cleanVars;
} else {
// Si sono verificati errori di validazione
$errors = $object->getErrors();
}

Verifica o imposta se l’oggetto è nuovo.

public function isNew(): bool
public function setNew(): void
public function unsetNew(): void

Esempio:

$object = new MyObject();
echo $object->isNew(); // true
$object->unsetNew();
echo $object->isNew(); // false
$object->setNew();
echo $object->isNew(); // true

Aggiunge un messaggio di errore.

public function setErrors(string|array $error): void

Esempio:

$object->setErrors('Il titolo è obbligatorio');
$object->setErrors(['Errore campo 1', 'Errore campo 2']);

Recupera tutti i messaggi di errore.

public function getErrors(): array

Esempio:

$errors = $object->getErrors();
foreach ($errors as $error) {
echo $error . "\n";
}

Restituisce errori formattati come HTML.

public function getHtmlErrors(): string

Esempio:

if (!$object->cleanVars()) {
echo '<div class="error">' . $object->getHtmlErrors() . '</div>';
}

Converte l’oggetto in un array.

public function toArray(): array

Esempio:

$object = new MyObject();
$object->setVar('title', 'Test');
$data = $object->toArray();
// ['title' => 'Test', ...]

Restituisce le definizioni variabili.

public function getVars(): array

Esempio:

$vars = $object->getVars();
foreach ($vars as $key => $definition) {
echo "Campo: $key, Tipo: {$definition['data_type']}\n";
}

<?php
/**
* Oggetto Article Personalizzato
*/
class Article extends XoopsObject
{
/**
* Costruttore - Inizializza tutte le variabili
*/
public function __construct()
{
parent::__construct();
// Chiave primaria
$this->initVar('article_id', XOBJ_DTYPE_INT, null, false);
// Campi obbligatori
$this->initVar('title', XOBJ_DTYPE_TXTBOX, '', true, 255);
$this->initVar('author_id', XOBJ_DTYPE_INT, 0, true);
// Campi opzionali
$this->initVar('summary', XOBJ_DTYPE_TXTAREA, '', false);
$this->initVar('content', XOBJ_DTYPE_TXTAREA, '', false);
$this->initVar('category_id', XOBJ_DTYPE_INT, 0, false);
// Timestamp
$this->initVar('created', XOBJ_DTYPE_INT, time(), false);
$this->initVar('updated', XOBJ_DTYPE_INT, time(), false);
// Flag di stato
$this->initVar('published', XOBJ_DTYPE_INT, 0, false);
$this->initVar('views', XOBJ_DTYPE_INT, 0, false);
// Metadati come array
$this->initVar('meta', XOBJ_DTYPE_ARRAY, [], false);
}
/**
* Ottieni data creazione formattata
*/
public function getCreatedDate(string $format = 'Y-m-d H:i:s'): string
{
return date($format, $this->getVar('created', 'n'));
}
/**
* Verifica se articolo è pubblicato
*/
public function isPublished(): bool
{
return $this->getVar('published', 'n') == 1;
}
/**
* Incrementa contatore visualizzazioni
*/
public function incrementViews(): void
{
$views = $this->getVar('views', 'n');
$this->setVar('views', $views + 1);
}
/**
* Validazione personalizzata
*/
public function validate(): bool
{
$this->errors = [];
// Validazione titolo
$title = trim($this->getVar('title', 'n'));
if (empty($title)) {
$this->setErrors('Il titolo è obbligatorio');
} elseif (strlen($title) < 5) {
$this->setErrors('Il titolo deve essere di almeno 5 caratteri');
}
// Validazione autore
if ($this->getVar('author_id', 'n') <= 0) {
$this->setErrors('L\'autore è obbligatorio');
}
return empty($this->errors);
}
}
// Utilizzo
$article = new Article();
$article->setVar('title', 'Mio Primo Articolo');
$article->setVar('author_id', 1);
$article->setVar('content', '<p>Contenuto articolo qui...</p>', true);
$article->setVar('meta', [
'keywords' => ['xoops', 'cms', 'php'],
'description' => 'Un articolo di esempio'
]);
if ($article->validate() && $article->cleanVars()) {
// Salva nel database tramite handler
$handler = xoops_getModuleHandler('article', 'mymodule');
$handler->insert($article);
echo "Articolo salvato con ID: " . $article->getVar('article_id');
} else {
echo "Errori: " . $article->getHtmlErrors();
}
  1. Inizializza Sempre Variabili: Definisci tutte le variabili nel costruttore usando initVar()

  2. Usa Tipi Dati Appropriati: Scegli la costante XOBJ_DTYPE_* corretta per la validazione

  3. Gestisci Input Utente Con Attenzione: Usa setVar() con $notGpc = false per input utente

  4. Valida Prima di Salvare: Chiama sempre cleanVars() prima delle operazioni database

  5. Usa Parametri Formato: Usa il formato appropriato in getVar() per il contesto

  6. Estendi per Logica Personalizzata: Aggiungi metodi specifici del dominio nelle sottoclassi

  • XoopsObjectHandler - Pattern handler per persistenza oggetti
  • ../Database/Criteria - Costruzione query con Criteria
  • ../Database/XoopsDatabase - Operazioni database

Vedi anche: Codice Sorgente XOOPS