Μετάβαση στο περιεχόμενο

Κλάση XoopsObject

Η κλάση XoopsObject είναι η θεμελιώδης βασική κλάση για όλα τα αντικείμενα δεδομένων στο σύστημα XOOPS. Παρέχει μια τυποποιημένη διεπαφή για τη διαχείριση των ιδιοτήτων των αντικειμένων, την επικύρωση, τη βρώμικη παρακολούθηση και τη σειριοποίηση.

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
└── [Custom Module Objects]
ΑκίνηταΤύποςΟρατότηταΠεριγραφή
$varsσυστοιχίαπροστατευμένοΑποθηκεύει ορισμούς και τιμές μεταβλητών
$cleanVarsσυστοιχίαπροστατευμένοΑποθηκεύει απολυμανμένες τιμές για λειτουργίες βάσης δεδομένων
$isNewboolπροστατευμένοΥποδεικνύει εάν το αντικείμενο είναι νέο (δεν βρίσκεται ακόμη στη βάση δεδομένων)
$errorsσυστοιχίαπροστατευμένοΑποθηκεύει μηνύματα επικύρωσης και σφάλματος
public function __construct()

Δημιουργεί μια νέα παρουσία XoopsObject. Το αντικείμενο επισημαίνεται ως νέο από προεπιλογή.

Παράδειγμα:

$object = new XoopsObject();
// Object is new and has no defined variables

Αρχικοποιεί έναν ορισμό μεταβλητής για το αντικείμενο.

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

Παράμετροι:

ΠαράμετροςΤύποςΠεριγραφή
$keyχορδήΌνομα μεταβλητής
$dataTypeintΣταθερά τύπου δεδομένων (βλ. Τύποι δεδομένων)
$valueμικτήΠροεπιλεγμένη τιμή
$requiredboolΕάν το πεδίο είναι υποχρεωτικό
$maxlengthintΜέγιστο μήκος για τύπους χορδών
$optionsχορδήΠρόσθετες επιλογές

Τύποι δεδομένων:

ΣταθεράΑξίαΠεριγραφή
XOBJ_DTYPE_TXTBOX1Εισαγωγή πλαισίου κειμένου
XOBJ_DTYPE_TXTAREA2Περιεχόμενο Textarea
XOBJ_DTYPE_INT3Ακέραια τιμή
XOBJ_DTYPE_URL4URL συμβολοσειρά
XOBJ_DTYPE_EMAIL5Διεύθυνση ηλεκτρονικού ταχυδρομείου
XOBJ_DTYPE_ARRAY6Σειριακός πίνακας
XOBJ_DTYPE_OTHER7Προσαρμοσμένος τύπος
XOBJ_DTYPE_SOURCE8Πηγαίος κώδικας
XOBJ_DTYPE_STIME9Μορφή σύντομου χρόνου
XOBJ_DTYPE_MTIME10Μορφή μεσαίου χρόνου
XOBJ_DTYPE_LTIME11Μορφή για μεγάλο χρονικό διάστημα
XOBJ_DTYPE_FLOAT12Κινούμενο σημείο
XOBJ_DTYPE_DECIMAL13Δεκαδικός αριθμός
XOBJ_DTYPE_ENUM14Απαρίθμηση

Παράδειγμα:

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);
}
}

Ορίζει την τιμή μιας μεταβλητής.

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

Παράμετροι:

ΠαράμετροςΤύποςΠεριγραφή
$keyχορδήΌνομα μεταβλητής
$valueμικτήΤιμή προς ρύθμιση
$notGpcboolΕάν αληθεύει, η τιμή δεν είναι από GET/POST/COOKIE

Επιστρέφει: bool - Σωστό εάν είναι επιτυχές, ψευδές διαφορετικά

Παράδειγμα:

$object = new MyObject();
$object->setVar('title', 'Hello World');
$object->setVar('content', '<p>Content here</p>', true); // Not from user input
$object->setVar('status', 1);

Ανακτά την τιμή μιας μεταβλητής με προαιρετική μορφοποίηση.

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

Παράμετροι:

ΠαράμετροςΤύποςΠεριγραφή
$keyχορδήΌνομα μεταβλητής
$formatχορδήΜορφή εξόδου

Επιλογές μορφής:

ΜορφήΠεριγραφή
's'Εμφάνιση - HTML οντότητες διαφυγής για εμφάνιση
'e'Επεξεργασία - Για τιμές εισαγωγής φόρμας
'p'Προεπισκόπηση - Παρόμοιο με εμφάνιση
'f'Δεδομένα φόρμας - Ακατέργαστα για επεξεργασία εντύπων
'n'Κανένα - Ακατέργαστη τιμή, χωρίς μορφοποίηση

Επιστρέφει: mixed - Η διαμορφωμένη τιμή

Παράδειγμα:

$object = new MyObject();
$object->setVar('title', 'Hello <World>');
echo $object->getVar('title', 's'); // "Hello &lt;World&gt;"
echo $object->getVar('title', 'e'); // "Hello &lt;World&gt;" (for input value)
echo $object->getVar('title', 'n'); // "Hello <World>" (raw)
// For array data types
$object->setVar('options', ['a', 'b', 'c']);
$options = $object->getVar('options', 'n'); // Returns array

Ορίζει πολλές μεταβλητές ταυτόχρονα από έναν πίνακα.

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

Παράμετροι:

ΠαράμετροςΤύποςΠεριγραφή
$valuesσυστοιχίαΣυσχετικός πίνακας κλειδιών => ζεύγη τιμών
$notGpcboolΕάν αληθεύει, οι τιμές δεν είναι από GET/POST/COOKIE

Παράδειγμα:

$object = new MyObject();
$object->setVars([
'title' => 'My Title',
'content' => 'My content',
'status' => 1
]);
// From database (not user input)
$object->setVars($row, true);

Ανακτά όλες τις τιμές μεταβλητών.

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

Παράμετροι:

ΠαράμετροςΤύποςΠεριγραφή
$keysσυστοιχίαΕιδικά κλειδιά για ανάκτηση (μηδενικό για όλους)
$formatχορδήΜορφή εξόδου
$maxDepthintΜέγιστο βάθος για ένθετα αντικείμενα

Επιστρέφει: array - Συσχετικός πίνακας τιμών

Παράδειγμα:

$object = new MyObject();
// Get all values
$allValues = $object->getValues();
// Get specific values
$subset = $object->getValues(['title', 'status']);
// Get raw values for database
$rawValues = $object->getValues(null, 'n');

Εκχωρεί μια τιμή απευθείας χωρίς επικύρωση (χρησιμοποιήστε με προσοχή).

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

Παράμετροι:

ΠαράμετροςΤύποςΠεριγραφή
$keyχορδήΌνομα μεταβλητής
$valueμικτήΤιμή προς εκχώρηση

Παράδειγμα:

// Direct assignment from trusted source (e.g., database)
$object->assignVar('id', $row['id']);
$object->assignVar('created', $row['created']);

Απολυμαίνει όλες τις μεταβλητές για λειτουργίες βάσης δεδομένων.

public function cleanVars(): bool

Επιστρέφει: bool - True αν όλες οι μεταβλητές είναι έγκυρες

Παράδειγμα:

$object = new MyObject();
$object->setVar('title', 'Test');
$object->setVar('email', 'user@example.com');
if ($object->cleanVars()) {
// Variables are sanitized and ready for database
$cleanData = $object->cleanVars;
} else {
// Validation errors occurred
$errors = $object->getErrors();
}

Το ### είναι Νέο

Ελέγχει ή ορίζει εάν το αντικείμενο είναι νέο.

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

Παράδειγμα:

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

Προσθέτει ένα μήνυμα σφάλματος.

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

Παράδειγμα:

$object->setErrors('Title is required');
$object->setErrors(['Field 1 error', 'Field 2 error']);

Ανακτά όλα τα μηνύματα σφάλματος.

public function getErrors(): array

Παράδειγμα:

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

Επιστρέφει σφάλματα που έχουν μορφοποιηθεί ως HTML.

public function getHtmlErrors(): string

Παράδειγμα:

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

Μετατρέπει το αντικείμενο σε πίνακα.

public function toArray(): array

Παράδειγμα:

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

Επιστρέφει τους ορισμούς της μεταβλητής.

public function getVars(): array

Παράδειγμα:

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

<?php
/**
* Custom Article Object
*/
class Article extends XoopsObject
{
/**
* Constructor - Initialize all variables
*/
public function __construct()
{
parent::__construct();
// Primary key
$this->initVar('article_id', XOBJ_DTYPE_INT, null, false);
// Required fields
$this->initVar('title', XOBJ_DTYPE_TXTBOX, '', true, 255);
$this->initVar('author_id', XOBJ_DTYPE_INT, 0, true);
// Optional fields
$this->initVar('summary', XOBJ_DTYPE_TXTAREA, '', false);
$this->initVar('content', XOBJ_DTYPE_TXTAREA, '', false);
$this->initVar('category_id', XOBJ_DTYPE_INT, 0, false);
// Timestamps
$this->initVar('created', XOBJ_DTYPE_INT, time(), false);
$this->initVar('updated', XOBJ_DTYPE_INT, time(), false);
// Status flags
$this->initVar('published', XOBJ_DTYPE_INT, 0, false);
$this->initVar('views', XOBJ_DTYPE_INT, 0, false);
// Metadata as array
$this->initVar('meta', XOBJ_DTYPE_ARRAY, [], false);
}
/**
* Get formatted creation date
*/
public function getCreatedDate(string $format = 'Y-m-d H:i:s'): string
{
return date($format, $this->getVar('created', 'n'));
}
/**
* Check if article is published
*/
public function isPublished(): bool
{
return $this->getVar('published', 'n') == 1;
}
/**
* Increment view counter
*/
public function incrementViews(): void
{
$views = $this->getVar('views', 'n');
$this->setVar('views', $views + 1);
}
/**
* Custom validation
*/
public function validate(): bool
{
$this->errors = [];
// Title validation
$title = trim($this->getVar('title', 'n'));
if (empty($title)) {
$this->setErrors('Title is required');
} elseif (strlen($title) < 5) {
$this->setErrors('Title must be at least 5 characters');
}
// Author validation
if ($this->getVar('author_id', 'n') <= 0) {
$this->setErrors('Author is required');
}
return empty($this->errors);
}
}
// Usage
$article = new Article();
$article->setVar('title', 'My First Article');
$article->setVar('author_id', 1);
$article->setVar('content', '<p>Article content here...</p>', true);
$article->setVar('meta', [
'keywords' => ['xoops', 'cms', 'php'],
'description' => 'An example article'
]);
if ($article->validate() && $article->cleanVars()) {
// Save to database via handler
$handler = xoops_getModuleHandler('article', 'mymodule');
$handler->insert($article);
echo "Article saved with ID: " . $article->getVar('article_id');
} else {
echo "Errors: " . $article->getHtmlErrors();
}
  1. Always Initialize Variables: Ορίστε όλες τις μεταβλητές στον κατασκευαστή χρησιμοποιώντας το initVar()

  2. Χρησιμοποιήστε κατάλληλους τύπους δεδομένων: Επιλέξτε τη σωστή σταθερά XOBJ_DTYPE_* για επικύρωση

  3. Χειριστείτε προσεκτικά την εισαγωγή χρήστη: Χρησιμοποιήστε setVar() με $notGpc = false για εισαγωγή χρήστη

  4. Επικύρωση πριν από την αποθήκευση: Να καλείτε πάντα το cleanVars() πριν από τη λειτουργία της βάσης δεδομένων

  5. Χρήση παραμέτρων μορφής: Χρησιμοποιήστε την κατάλληλη μορφή στο getVar() για το περιβάλλον

  6. Extend for Custom Logic: Προσθήκη μεθόδων για συγκεκριμένο τομέα σε υποκλάσεις

  • XoopsObjectHandler - Μοτίβο χειρισμού για επιμονή αντικειμένων
  • ../Database/Criteria - Κτίριο ερωτημάτων με κριτήρια
  • ../Database/XoopsDatabase - Λειτουργίες βάσης δεδομένων

Δείτε επίσης: XOOPS Πηγαίος κώδικας