thinkphp3.2高级模型的序列化字段优化

大兄弟 2018年12月27日0   158

今天想用thinkphp3.2的adv高级模型处理一下需要序列化存取的字段,但是发现使用create方法后序列化的字段会被过滤掉,所以最保险的方法就是在表单中仍然使用分组的方式进行提交,避免在字段过滤的时候被忽略掉。

如果不想使用改变核心的方式解决的话,可以使用高级模型提供的字段过滤功能,这个功能是针对create方法的,貌似这就是官方给出的解决方案,但官方并没有明确指出,具体可前往手册了解。

/**
 * 处理序列化字段
 * 基于官方高级模型的改进版
 * @param $data
 */
protected function serializeField(&$data)
{
    // 检查序列化字段
    if (!empty($this->serializeField)) {
        // 定义方式  $this->serializeField = array('ser'=>array('name','email'));
        foreach ($this->serializeField as $key => $val) {
            if (!$data[$key]) continue;// create方法会过滤掉不存在的字段 所以配置好的序列化字段在create方法下永远不能生效
            $serialize = array();
            foreach ($val as $name) {
                if (isset($data[$key][$name])) {
                    $serialize[$name] = $data[$key][$name];
                    unset($data[$key][$name]);
                }
            }
            if (!empty($serialize))
                $data[$key] = serialize($serialize);
        }
    }
    return $data;
}