PHPackages                             pozitronik/yii2-users-options - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. pozitronik/yii2-users-options

ActiveYii2-extension[Utility &amp; Helpers](/categories/utility)

pozitronik/yii2-users-options
=============================

Server-side personal user options

2.1.2.2(9mo ago)03.9k1GPL-3.0PHPPHP &gt;=8.0CI passing

Since May 5Pushed 9mo ago1 watchersCompare

[ Source](https://github.com/pozitronik/yii2-users-options)[ Packagist](https://packagist.org/packages/pozitronik/yii2-users-options)[ RSS](/packages/pozitronik-yii2-users-options/feed)WikiDiscussions master Synced yesterday

READMEChangelogDependencies (7)Versions (28)Used By (1)

yii2-users-options
==================

[](#yii2-users-options)

Хранение настроек пользователя на сервере (a-la server-side cookies)

[![Build Status](https://github.com/pozitronik/yii2-users-options/actions/workflows/ci.yml/badge.svg)](https://github.com/pozitronik/yii2-users-options/actions)

Установка
---------

[](#установка)

Предпочтительный вариант установки расширения через [composer](http://getcomposer.org/download/).

Выполните

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

```

или добавьте

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

```

В секцию require файла `composer.json` в вашем проекте.

Описание
--------

[](#описание)

Модель UsersOptions умеет хранить набор произвольных key-value параметров, привязанных к любому объекту (подразумевается, что таким объектом выступает пользователь системы, но, при желании, модель может быть использована и для других объектов). Данные хранятся в таблице со структурой `user_id|option_name|option_value,` и модель всего лишь предоставляет интерфейсы для удобного доступа к хранилищу. Типы данных хранимых значений ограничиваются только используемым методом сериализации. По умолчанию обеспечивается типобезопасное хранение скалярных данных, массивов и объектов без реккурентных ссылок.

Использование
-------------

[](#использование)

Расширению необходима таблица для хранения данных. Её можно создать, выполнив команду:

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

В этом случае будет создана таблица `users_options`, и никакой дополнительной настройки более не потребуется.

При необходимости можно переопределить имя используемой таблицы. Для этого нужно подключить в конфигурационном файле вашего приложения модуль UsersOptionsModule с именем `usersoptions`, и в его конфигурации указать имя используемой таблицы в параметре `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` -- название таблицы, используемое модулем (read-only).

Публичные методы класса:

- `get(string $option):mixed` - возвращает значение параметра `$option` для установленного пользователя.
- `set(string $option, mixed $value):bool` - присваивает параметру `$option` значение `$value`. Возвращает успех сохранения параметра.
- `drop(string $option):bool` - удаляет параметр `$option` (без проверки его существования). Возвращает успех удаления параметра.
- `dropAll():bool` - удаляет все параметры пользователя.
- `list():array` - возвращает массив всех сохранённых параметров пользователя в формате \[`$option` =&gt; `$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`. Просто используйте трейт в модели пользователя, например так:

```
