Хранение настроек в базе данных

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
kolomat
Сообщения: 3
Зарегистрирован: 2021.03.23, 16:21

Хранение настроек в базе данных

Сообщение kolomat »

Добрый день, подскажите по такому вопросу. В Yii только разбираюсь, пишу небольшое приложение которое взаимодейсвует с API нескольких сервисов. Для настроек данных для API (логин, пароль, соотношения статусов) решил не изобретать и сделать по типу как реализовано в Opencart. Таблица setting, а в ней по сути id, key, value. Например key название сервиса (напр. SendPulse), а value массив настроек в json формате. Но поскольку в Yii только разбираюсь, при таком подходе столкнулся с большой проблемой :)
Образно, создал ActiveForm, есть два поля, которые передают в value массив и еще одно скрытое с значением key, контроллер и модель идут стандартные, созданные через gii.

Код: Выделить всё

    public function actionSendPulse()
    {
        $model = new Setting();

        if ($model->load(Yii::$app->request->post())) {
            if ($model->validate()) {
                $model->save();
            }
        }

        return $this->render('send-pulse', [
            'model' => $model,
        ]);
    }
Модель

Код: Выделить всё


    public static function tableName()
    {
        return 'setting';
    }
    
    public function beforeSave($insert)
    {
        if (parent::beforeSave($insert)) {
            $this->value = Json::encode($this->value);
            return true;
        } else {
            return false;
        }
    }

    public function afterFind()
    {
        $this->value = Json::decode($this->value);
    }

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['key', 'value'], 'required'],
            [['key'], 'string', 'max' => 64],
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'key' => 'Key',
            'value' => 'Value',
        ];
    }
Сохраняется в бд и данные впринципе потом можно по ключу получать, но проблемы по сути две. Первая что если например нужно отредактировать какие либо настройки для именно этого сервиса, форма уже понятное дело идет пустая и нужно абсолютно все по новой вбивать, а вторая в целом связана с первой, потому что при повторном сохранении просто создается новая строка с новыми настройками. Возможно сталкивались с подобным и подскажите как по человечески подобное организовать, что бы не плодить таблицы с настройками под разные сервисы и не хранить настройки в файлах?
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Хранение настроек в базе данных

Сообщение yiijeka »

Через gii сконфигурируйте для таблицы новую МОДЕЛЬ и далее для этой модели в том же gii сделайте CRUD - готово.
Ответить