pozitronik/yii2-users-options

服务器端个人用户选项

2.1.1 2023-04-19 11:32 UTC

README

在服务器上存储用户设置(类似服务器端cookie)

Build Status

安装

推荐通过 composer 安装扩展。

执行

php composer.phar require pozitronik/yii2-users-options "dev-master"

或添加

"pozitronik/yii2-users-options": "dev-master"

到项目中的 composer.json 文件的 require 部分中。

描述

UsersOptions 模型可以存储与任何对象相关联的任意 key-value 参数集(假设对象是系统用户,但也可以用于其他对象)。数据存储在结构为 user_id|option_name|option_value, 的表中,模型仅提供方便访问存储的接口。存储值的数据类型仅限于使用的序列化方法。默认情况下,提供类型安全的标量数据、数组和对象(无递归引用)存储。

使用

扩展需要用于存储数据的表。可以执行以下命令来创建它:

yii migrate --migrationPath=@vendor/pozitronik/yii2-users-options/migrations

在这种情况下,将创建 users_options 表,并且不再需要其他配置。

如果需要,可以重写使用的表名。为此,需要在应用程序配置文件中连接名为 usersoptions 的 UsersOptionsModule,并在其配置中指定使用的表名在 tableName 参数中。

模型可以使用中间缓存(如果 Yii 中存在缓存),这由 cacheEnabled 参数控制。配置示例

'modules' => [
		'usersoptions' => [
			'class' => UsersOptionsModule::class,
			'params' => [
				'tableName' => 'auth_users_options',//используемое имя таблицы, по умолчанию 'users_options'
				'cacheEnabled' => true//использование кеша Yii, по умолчанию false
		],
		...
]

类公共参数

  • null|int $user_id = null -- 用户标识符。如果未设置,则使用当前用户标识符。
  • Connection|array|string $db = 'db' -- 现有数据库连接标识符或新的连接配置。
  • null|array $serializer = null -- 用于序列化存储数据的函数。如果未设置,则使用标准函数 serialize()/unserialize()。若要重定义,请使用闭包设置参数,例如
$options->serializer = [
	0 => function($value) {//функция для сериализации
		return json_encode($value);
	},
	1 => function(string $value) {//функция для десериализации
		return json_decode($value);
	},
];
  • bool $cacheEnabled = false -- 启用中间缓存。如果未直接设置,则使用模块配置中的 cacheEnabled 参数的值。
  • string $tableName -- 模块使用的表名(只读)。

类公共方法

  • get(string $option):mixed - 返回为指定用户设置的用户参数 $option 的值。
  • set(string $option, mixed $value):bool - 为参数 $option 分配值 $value。返回参数保存成功。
  • drop(string $option):bool - 删除参数 $option(不检查其是否存在)。返回删除参数成功。
  • dropAll():bool - 删除所有用户参数。
  • list():array - 返回用户所有保存参数的数组,格式为 [$option => $value]>。

还有静态方法

  • getStatic(int $user_id, string $option):mixed
  • setStatic(int $user_id, string $option, mixed $value):bool
  • dropStatic(int $user_id, string $option):bool
  • dropAllStatic(int $user_id):bool
  • listStatic(int $user_id):array

get()/set()/drop()/dropAll()/list() 的调用类似。

如果用户模型扩展了 ActiveRecord 类并且具有整数标识符 $id,那么最简单的方法是使用特质 pozitronik\users_options\traits\UsersOptionsTrait.php。在其中,定义了 $options 属性,该属性返回 UsersOptions 对象。只需在用户模型中使用特质,例如这样

<?php
declare(strict_types = 1);

namespace app\models;

use pozitronik\users_options\traits\UsersOptionsTrait;

/**
 * @property int $id
 * ...
 */
class AuthUsers extends ActiveRecord {
    use UsersOptionsTrait;

    /*...*/
}

之后,可以通过以下方式调用当前用户的参数

$value = AuthUsers::findOne($id)->options->get($option);
AuthUsers::findOne($id)->options->set($option, $value);

在其他情况下,请在模型中自行定义 $options 属性,或者使用静态方法 UsersOptions::getStatic()/UsersOptions::getStatic()

要使用 AJAX 保存设置,在相应的 view 文件中连接资产 pozitronik\users_options\assets\UsersOptionsAsset.php 并使用 js 调用 set_option(key, value)。假设它将调用在控制器 pozitronik\users_options\controllers\AjaxController 中实现的动作 actionUserSetOption(),或者包含实现该方法的控制器(或继承自控制器扩展的控制器)。所提供的实现应被视为示例,因为具体方法可能因情况而异。

许可证

GNU GPL v3.0