我是我的电子商店的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我在解决了本地任务之后没有忘记这个因为我经常遇到这样的问题,如果我不想使用全局覆盖来放置所需的逻辑,我必须将这个代码从一个控制器复制粘贴到另一个,这不要让我平静地睡觉:)。提前致谢:)