pozitronik / yii2-users-options
服务器端个人用户选项
Requires
- php: >=8.0
Requires (Dev)
- codeception/codeception: ^5.0
- codeception/module-asserts: *
- codeception/module-db: *
- codeception/module-phpbrowser: *
- codeception/module-yii2: *
- vlucas/phpdotenv: ^5.4.1
- yiisoft/yii2: dev-master
README
在服务器上存储用户设置(类似服务器端cookie)
安装
推荐通过 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