Bỏ qua để đến nội dung

Lớp XoopsObject

XoopsObject class là cơ sở cơ bản class cho tất cả các đối tượng dữ liệu trong hệ thống XOOPS. Nó cung cấp một giao diện được tiêu chuẩn hóa để quản lý các thuộc tính đối tượng, xác thực, theo dõi bẩn và tuần tự hóa.

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]
Bất động sảnLoạiTầm nhìnMô tả
$varsmảngđược bảo vệLưu trữ các định nghĩa và giá trị biến
$cleanVarsmảngđược bảo vệLưu trữ các giá trị đã được khử trùng cho các hoạt động cơ sở dữ liệu
$isNewboolđược bảo vệCho biết đối tượng có mới hay không (chưa có trong cơ sở dữ liệu)
$errorsmảngđược bảo vệLưu trữ thông báo xác thực và lỗi
public function __construct()

Tạo một phiên bản XoopsObject mới. Đối tượng được đánh dấu là mới theo mặc định.

Ví dụ:

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

Khởi tạo một định nghĩa biến cho đối tượng.

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

Thông số:

Tham sốLoạiMô tả
$keychuỗiTên biến
$dataTypeintHằng số kiểu dữ liệu (xem Kiểu dữ liệu)
$valuehỗn hợpGiá trị mặc định
$requiredboolTrường có bắt buộc hay không
$maxlengthintĐộ dài tối đa cho các loại chuỗi
$optionschuỗiTùy chọn bổ sung

Các loại dữ liệu:

Hằng sốGiá trịMô tả
XOBJ_DTYPE_TXTBOX1Nhập hộp văn bản
XOBJ_DTYPE_TXTAREA2Nội dung vùng văn bản
XOBJ_DTYPE_INT3Giá trị nguyên
XOBJ_DTYPE_URL4Chuỗi URL
XOBJ_DTYPE_EMAIL5Địa chỉ email
XOBJ_DTYPE_ARRAY6Mảng nối tiếp
XOBJ_DTYPE_OTHER7Loại tùy chỉnh
XOBJ_DTYPE_SOURCE8Mã nguồn
XOBJ_DTYPE_STIME9Định dạng thời gian ngắn
XOBJ_DTYPE_MTIME10Định dạng thời gian trung bình
XOBJ_DTYPE_LTIME11Định dạng thời gian dài
XOBJ_DTYPE_FLOAT12Điểm nổi
XOBJ_DTYPE_DECIMAL13Số thập phân
XOBJ_DTYPE_ENUM14Đếm

Ví dụ:

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

Đặt giá trị của một biến.

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

Thông số:

Tham sốLoạiMô tả
$keychuỗiTên biến
$valuehỗn hợpGiá trị cần đặt
$notGpcboolNếu đúng, giá trị không phải từ GET/POST/COOKIE

Trả về: bool - Đúng nếu thành công, nếu không thì sai

Ví dụ:

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

Truy xuất giá trị của một biến với định dạng tùy chọn.

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

Thông số:

Tham sốLoạiMô tả
$keychuỗiTên biến
$formatchuỗiĐịnh dạng đầu ra

Tùy chọn định dạng:

Định dạngMô tả
's'Hiển thị - Các thực thể HTML đã thoát để hiển thị
'e'Chỉnh sửa - Đối với giá trị đầu vào của biểu mẫu
'p'Xem trước - Tương tự như hiển thị
'f'Dữ liệu biểu mẫu - Nguyên để xử lý biểu mẫu
'n'Không có - Giá trị thô, không có định dạng

Ví dụ:

$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

Đặt nhiều biến cùng một lúc từ một mảng.

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

Thông số:

Tham sốLoạiMô tả
$valuesmảngMảng kết hợp các cặp khóa => giá trị
$notGpcboolNếu đúng, các giá trị không phải từ GET/POST/COOKIE

Ví dụ:

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

Truy xuất tất cả các giá trị biến.

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

Thông số:

Tham sốLoạiMô tả
$keysmảngCác khóa cụ thể để truy xuất (null cho tất cả)
$formatchuỗiĐịnh dạng đầu ra
$maxDepthintĐộ sâu tối đa cho các đối tượng lồng nhau

Trả về: array - Mảng giá trị kết hợp

Ví dụ:

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

Gán một giá trị trực tiếp mà không cần xác nhận (sử dụng một cách thận trọng).

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

Thông số:

Tham sốLoạiMô tả
$keychuỗiTên biến
$valuehỗn hợpGiá trị để gán

Ví dụ:

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

Vệ sinh tất cả các biến cho hoạt động cơ sở dữ liệu.

public function cleanVars(): bool

Trả về: bool - Đúng nếu tất cả các biến đều hợp lệ

Ví dụ:

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

Kiểm tra hoặc đặt xem đối tượng có mới hay không.

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

Ví dụ:

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

Thêm một thông báo lỗi.

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

Ví dụ:

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

Truy xuất tất cả các thông báo lỗi.

public function getErrors(): array

Ví dụ:

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

Trả về lỗi được định dạng là HTML.

public function getHtmlErrors(): string

Ví dụ:

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

Chuyển đổi đối tượng thành một mảng.

public function toArray(): array

Ví dụ:

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

Trả về các định nghĩa biến.

public function getVars(): array

Ví dụ:

$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. Luôn khởi tạo các biến: Xác định tất cả các biến trong hàm tạo bằng initVar()

  2. Sử dụng các loại dữ liệu phù hợp: Chọn hằng số XOBJ_DTYPE_* chính xác để xác thực

  3. Xử lý dữ liệu nhập của người dùng một cách cẩn thận: Sử dụng setVar() với $notGpc = false cho dữ liệu nhập của người dùng

  4. Xác thực trước khi lưu: Luôn gọi cleanVars() trước khi thao tác với cơ sở dữ liệu

  5. Sử dụng tham số định dạng: Sử dụng định dạng thích hợp trong getVar() cho ngữ cảnh

  6. Mở rộng cho Logic tùy chỉnh: Thêm các phương thức dành riêng cho miền trong các lớp con

  • XoopsObjectHandler - Mẫu trình xử lý để duy trì đối tượng
  • ../Database/Criteria - Xây dựng truy vấn với các tiêu chí
  • ../Database/XoopsDatabase - Thao tác với cơ sở dữ liệu

Xem thêm: Mã nguồn XOOPS