数据
zin 实现了数据存取机制,方便用户在视图层(View)或 zin 部件内读写数据,数据读取和写入都是使用 data()
方法,下面进行介绍。
读取数据
读取数据使用 data()
方法,定义如下:
php
/** 获取指定名称的数据 */
function data(string $name): mixed;
/** 获取多个名称的数据 */
function data(array $names): array;
参数 | 类型 | 作用 |
---|---|---|
$name | string | 表示要获取的数据的名称,名称支持通过 . 来访问数组或对象内部的属性 |
$names | array | 可以使用一个数组指定多个名称,这样可以一次性获取多个数据,并以数组的形式返回结果 |
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);
参数 | 类型 | 作用 |
---|---|---|
$names | array | 可以使用一个数组指定多个名称,这样可以一次性获取多个数据,并以数组的形式返回结果 |
$value | mixed | 要写入的数据 |
$multipleData | array | 指定一个关联数组来一次性写入多个数据 |
下面演示用法:
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/'