Skip to content

数据

zin 实现了数据存取机制,方便用户在视图层(View)或 zin 部件内读写数据,数据读取和写入都是使用 data() 方法,下面进行介绍。

读取数据

读取数据使用 data() 方法,定义如下:

php
/** 获取指定名称的数据 */
function data(string $name): mixed;

/** 获取多个名称的数据 */
function data(array $names): array;
参数类型作用
$namestring表示要获取的数据的名称,名称支持通过 . 来访问数组或对象内部的属性
$namesarray可以使用一个数组指定多个名称,这样可以一次性获取多个数据,并以数组的形式返回结果

zin 数据机制默认已将控制层(Controller)中 $this->view 属性上的数据写入存取器中,可以通过 data() 方法直接获取使用:

php
/* 获取单个数据 */
$title = data('title'); // $title 变量为 '首页'

/* 获取未定义的数据 */
$link = data('link');  // $link 变量为 NULL,因为没有定义

/* 获取多个数据 */
$values = data(['from', 'userName', 'notExists']); // $values 为 ['任务页', 'admin', NULL]
php
class my extends control
{
    public function example()
    {
        $this->view->title    = '首页';
        $this->view->from     = '任务页';
        $this->view->userName = 'admin';

        $this->view->display();
    }
}

访问不存在的数据

区别于 PHP 原生的处理方式,当通过 data() 读取不存在的数据时并不会触发语法错误,而是返回 NULL

写入数据

写入数据同样使用 data() 方法,定义如下:

php
/** 写入数据,如果有同名数据则会被更新 */
data(string $name, mixed $value);

/** 第一个参数指定为 NULL,可以使用第二个参数通过一个关联数组来一次性写入多个数据 */
data(NULL, array $multipleData);
参数类型作用
$namesarray可以使用一个数组指定多个名称,这样可以一次性获取多个数据,并以数组的形式返回结果
$valuemixed要写入的数据
$multipleDataarray指定一个关联数组来一次性写入多个数据

下面演示用法:

php
$title = data('title'); // $title 变量为 '首页'

/* 更新 title 数据 */
data('title', '我的地盘');

$title = data('title'); // $title 变量为 '我的地盘'

/* 设置 link 数据 */
data('link', 'https://openzui.com/zin/');

$link = data('link');  // 'https://openzui.com/zin/'

/* 设置多个多个数据 */
data(NULL, ['link' => 'https://zui.oop.cc', 'title' => 'ZUI']);
php
class my extends control
{
    public function example()
    {
        $this->view->title    = '首页';
        $this->view->from     = '任务页';
        $this->view->userName = 'admin';

        $this->view->display();
    }
}

读写数组或对象内部属性

在使用 data() 进行数据读写时,数据名称可以使用 . 号来访问数组或对象内部属性,下面演示用法:

php
/* 写入实例数据 */
$item = new stdClass();
$item->btn = ['text' => 'Click', 'icon' => 'icon-save', 'class' => ['btn', 'primary']];
data('item', $item);

/* 读取 item 数据 */
$myItem = data('item'); // $myItem 等于 $item

/* 读取 item->btn 属性 */
$btn = data('item.btn'); // $btn 相当于 $item->btn

/* 读取 item->btn['text'] */
$btnText = data('item.btn.text'); // $btnText 等于 $item->btn['text']

/* 读取不存在的属性 item->content */
$content = data('item.content'); // $content 值为 NULL

/* 读取 item->btn['class'][0] */
$btnClass = data('item.btn.class.0'); // $btnClass 等于 $item->btn['class'][0]

/* 更新 item->btn['text'] */
data('item.btn.text', 'Save'); // $item->btn['text'] 值为 'Save'

/* 设置 item->btn['url'] */
data('item.btn.url', 'https://openzui.com/zin/'); // $item->btn['url'] 值为 'https://openzui.com/zin/'

https://zentao.net