Lewati ke konten

Kelas XoopsObject

Kelas XoopsObject adalah kelas dasar fundamental untuk semua objek data dalam sistem XOOPS. Ini menyediakan antarmuka standar untuk mengelola properti objek, validasi, pelacakan kotor, dan serialisasi.

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]
PropertiKetikVisibilitasDeskripsi
$varssusunandilindungiMenyimpan definisi dan nilai variabel
$cleanVarssusunandilindungiMenyimpan nilai yang disanitasi untuk operasi database
$isNewbodohdilindungiMenunjukkan apakah objek baru (belum ada di database)
$errorssusunandilindungiMenyimpan validasi dan pesan kesalahan
public function __construct()

Membuat instance XoopsObject baru. Objek ditandai sebagai baru secara default.

Contoh:

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

Menginisialisasi definisi variabel untuk objek.

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

Parameter:

ParameterKetikDeskripsi
$keytaliNama variabel
$dataTypeke dalamKonstanta tipe data (lihat Tipe Data)
$valuecampuranNilai bawaan
$requiredbodohApakah kolom wajib diisi
$maxlengthke dalamPanjang maksimum untuk tipe string
$optionstaliOpsi tambahan

Tipe Data:

KonstanNilaiDeskripsi
XOBJ_DTYPE_TXTBOX1Masukan kotak teks
XOBJ_DTYPE_TXTAREA2Konten area teks
XOBJ_DTYPE_INT3Nilai bilangan bulat
XOBJ_DTYPE_URL4Tali URL
XOBJ_DTYPE_EMAIL5Alamat email
XOBJ_DTYPE_ARRAY6Array berseri
XOBJ_DTYPE_OTHER7Tipe khusus
XOBJ_DTYPE_SOURCE8Kode sumber
XOBJ_DTYPE_STIME9Format waktu singkat
XOBJ_DTYPE_MTIME10Format waktu sedang
XOBJ_DTYPE_LTIME11Format lama
XOBJ_DTYPE_FLOAT12Titik mengambang
XOBJ_DTYPE_DECIMAL13Angka desimal
XOBJ_DTYPE_ENUM14Pencacahan

Contoh:

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

Menetapkan nilai variabel.

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

Parameter:

ParameterKetikDeskripsi
$keytaliNama variabel
$valuecampuranNilai yang akan ditetapkan
$notGpcbodohJika benar, nilainya bukan dari GET/POST/COOKIE

Pengembalian: bool - Benar jika berhasil, salah jika sebaliknya

Contoh:

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

Mengambil nilai variabel dengan format opsional.

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

Parameter:

ParameterKetikDeskripsi
$keytaliNama variabel
$formattaliFormat keluaran

Opsi Format:

FormatDeskripsi
's'Tampilkan - Entitas HTML lolos untuk ditampilkan
'e'Sunting - Untuk nilai masukan formulir
'p'Pratinjau - Mirip dengan pertunjukan
'f'Data formulir - Mentah untuk pemrosesan formulir
'n'Tidak Ada - Nilai mentah, tanpa pemformatan

Pengembalian: mixed - Nilai yang diformat

Contoh:

$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

Menetapkan beberapa variabel sekaligus dari sebuah array.

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

Parameter:

ParameterKetikDeskripsi
$valuessusunanArray asosiatif pasangan kunci => nilai
$notGpcbodohJika benar, nilainya bukan dari GET/POST/COOKIE

Contoh:

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

Mengambil semua nilai variabel.

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

Parameter:

ParameterKetikDeskripsi
$keyssusunanKunci khusus untuk diambil (null untuk semua)
$formattaliFormat keluaran
$maxDepthke dalamKedalaman maksimum untuk objek bersarang

Pengembalian: array - Rangkaian nilai asosiatifContoh:

$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');

Menetapkan nilai secara langsung tanpa validasi (gunakan dengan hati-hati).

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

Parameter:

ParameterKetikDeskripsi
$keytaliNama variabel
$valuecampuranNilai untuk ditetapkan

Contoh:

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

Membersihkan semua variabel untuk operasi database.

public function cleanVars(): bool

Pengembalian: bool - Benar jika semua variabel valid

Contoh:

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

Memeriksa atau menyetel apakah objek tersebut baru.

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

Contoh:

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

Menambahkan pesan kesalahan.

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

Contoh:

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

Mengambil semua pesan kesalahan.

public function getErrors(): array

Contoh:

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

Mengembalikan kesalahan yang diformat sebagai HTML.

public function getHtmlErrors(): string

Contoh:

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

Mengonversi objek menjadi array.

public function toArray(): array

Contoh:

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

Mengembalikan definisi variabel.

public function getVars(): array

Contoh:

$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. Selalu Inisialisasi Variabel: Tentukan semua variabel dalam konstruktor menggunakan initVar()

  2. Gunakan Tipe Data yang Sesuai: Pilih konstanta XOBJ_DTYPE_* yang benar untuk validasi

  3. Tangani Input Pengguna dengan Hati-hati: Gunakan setVar() dengan $notGpc = false untuk input pengguna

  4. Validasi Sebelum Menyimpan: Selalu hubungi cleanVars() sebelum operasi database

  5. Gunakan Parameter Format: Gunakan format yang sesuai di getVar() untuk konteksnya

  6. Perluas untuk Logika Kustom: Tambahkan metode khusus domain di subkelas

  • XoopsObjectHandler - Pola handler untuk persistensi objek
  • ../Database/Criteria - Pembuatan kueri dengan Kriteria
  • ../Database/XoopsDatabase - Operasi basis data

Lihat juga: Kode Sumber XOOPS