Prestashop returns 来自数据库的内爆数组的最后一个值

Prestashop returns last value of imploded array from DB

我开始摆弄 Prestashop 1.7 模块,我 运行 陷入了这种奇怪的行为。

我有这段代码可以将表单 post 中的值保存到数据库(工作正常)

protected function postProcess()
{
    $form_values = $this->getConfigFormValues();

    foreach (array_keys($form_values) as $key) {
        Configuration::updateValue($key, Tools::getValue($key));
        if($key == 'MSLT_MEGAMENU_CATEGORIES'){
            $categories = implode(",",Tools::getValue($key));
            Configuration::updateValue('MSLT_MEGAMENU_CATEGORIES', $categories);
        }else{
            $this->errors[]=$this->l('Please select categories to display');
        }
    }
}

然后我使用这段代码从数据库中获取这些值(工作正常)

protected function getConfigFormValues()
{
    $categories = explode(',',Configuration::get('MSLT_MEGAMENU_CATEGORIES', true));
    return array(
        'MSLT_MEGAMENU_LIVE_MODE' => Configuration::get('MSLT_MEGAMENU_LIVE_MODE', true),
        'MSLT_MEGAMENU_CATEGORIES' => $categories,
        'MSLT_MEGAMENU_ACCOUNT_EMAIL' => Configuration::get('MSLT_MEGAMENU_ACCOUNT_EMAIL', 'contact@prestashop.com'),
        'MSLT_MEGAMENU_ACCOUNT_PASSWORD' => Configuration::get('MSLT_MEGAMENU_ACCOUNT_PASSWORD', null),
    );
}

和用值填充表单的助手

    $helper->tpl_vars = array(
        'fields_value' => $this->getConfigFormValues(), /* Add values for your inputs */
        'languages' => $this->context->controller->getLanguages(),
        'id_language' => $this->context->language->id,
    );

    return $helper->generateForm(array($this->getConfigForm()));

这是尝试从数据库加载值时的 var_dump(),对于这种情况,我的数据库值为 (1,3,9)

array(1) { [0]=> string(1) "9" }

如您所见,Configuration::get() 仅获取最后一个字符串值。 有趣的行为是,当我更新数据并停留在同一页面时,一切正常并且数据被正确获取,但是当我离开模块配置页面并返回时,问题发生了。也许我遗漏了一些代码片段?我还是个新手。如果需要我可以提供更多代码。

我发现从数据库中正确获取内爆值的肮脏解决方法。也许有人会用到。

    $sql = 'SELECT * FROM '._DB_PREFIX_.'configuration WHERE name = "MSLT_MEGAMENU_SELECTED_CAT"';
    $value = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql);
    $selected = explode(',',$value['value']);

我不知道你的具体目标是什么,但无论如何使用Prestashop自带的功能总是很方便的。 保存并 select 配置变量 例如,以 json 格式保存值

 Configuration::updateValue('MYVALUES', Tools::jsonEncode(Tools::getValue('MYVALUES')), true );

例如,获取值

Tools::jsonDecode( Configuration::get( 'MYVALUES' );