PrestaShop AdminController - 有更好的方法来保留反斜杠和html entites吗?

时间:2016-12-15 16:00:17

标签: php prestashop prestashop-1.6

我是我的电子商店的Prestashop模块;我已经创建了模块自己的AdminController - 继承者类,其中包含用于管理模块设置的标准列表和表单视图,以及用于在数据库中存储设置的ObjectModel - 继承者类。一切正常,直到我必须存储带有下符号的文本字段:\ < >

问题在于HelperForm 破坏使用Tools::getValue()从数据库中检索到的干净数据,该数据应用了条带,而不添加斜杠来清理数据。

我暂时解决了以下问题:

  • 保存< >符号我只在self::TYPE_HTML中使用ObjectModel定义;这是一个很好的声明性解决方案(我只是定义字段选项,控制器按照我需要的方式完成所有操作);

  • 但为了保存反斜杠,我必须使用这样的拦截:

public function getFieldValuePreserveSlashes($obj, $key, $id_lang = null) {
    if ($id_lang) 
        $default_value = (isset($obj->id) && $obj->id && isset($obj->{$key}[$id_lang])) ? $obj->{$key}[$id_lang] : false;
    else 
        $default_value = isset($obj->{$key}) ? $obj->{$key} : false;
    $default_value = addslashes($default_value);
    Tools::mapValue($key, 'addslashes');
    return Tools::getValue($key.($id_lang ? '_'.$id_lang : ''), $default_value);
}
public function getFieldValue($obj, $key, $id_lang = null) {
    if($key === 'export_params_text') 
        return $this->getFieldValuePreserveSlashes($obj, $key, $id_lang);
    else
        return parent::getFieldValue($obj, $key, $id_lang);
}

它可以工作,但我想这不是最好的方式(我仍然希望有一些更原生的方式,类似于我可以设置的一些选项,而不是复制核心功能代码只是为了添加2个字符串:)

PS我在解决了本地任务之后没有忘记这个因为我经常遇到这样的问题,如果我不想使用全局覆盖来放置所需的逻辑,我必须将这个代码从一个控制器复制粘贴到另一个,这不要让我平静地睡觉:)。

提前致谢:)

0 个答案:

没有答案