合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
首先看完整代码 然后分部分解释 CommentModel.php ~~~ <?php namespace plugins\d_comment\model; use think\Model; class CommentModel extends Model { /** * 关联 user表 * @return $this */ public function user() { return $this->belongsTo('UserModel', 'user_id')->setEagerlyType(1); } /** * 关联 user表 * @return $this */ public function toUser() { return $this->belongsTo('UserModel', 'to_user_id')->setEagerlyType(1); } /** * content 自动转化 * @param $value * @return string */ public function getContentAttr($value) { return cmf_replace_content_file_url(htmlspecialchars_decode($value)); } /** * content 自动转化 * @param $value * @return string */ public function setContentAttr($value) { $config = \HTMLPurifier_Config::createDefault(); if (!file_exists(RUNTIME_PATH . 'HTMLPurifier_DefinitionCache_Serializer')) { mkdir(RUNTIME_PATH . 'HTMLPurifier_DefinitionCache_Serializer'); } $config->set('Cache.SerializerPath', RUNTIME_PATH . 'HTMLPurifier_DefinitionCache_Serializer'); $purifier = new \HTMLPurifier($config); $cleanHtml = $purifier->purify(cmf_replace_content_file_url(htmlspecialchars_decode($value), true)); return htmlspecialchars($cleanHtml); } } ~~~ 解释部分: ~~~ /** * 关联 user表 * @return $this */ public function user() { return $this->belongsTo('UserModel', 'user_id')->setEagerlyType(1); } /** * 关联 user表 * @return $this */ public function toUser() { return $this->belongsTo('UserModel', 'to_user_id')->setEagerlyType(1); } ~~~ 首先我们定义了两个方法,用来取得用户表信息。 对应Comment表的user_id,to_user_id这两个外键字段 对于hasMany的讲解 [thinkphp一对多关联](https://ihavenolimitations.xyz/manual/thinkphp5/142358) setEagerlyType 设置预载入方式 $type 预载入方式 0 JOIN查询 1 IN查询 [in和join的效率哪个高](http://blog.csdn.net/qq_33290787/article/details/51931261) ~~~ public function getContentAttr($value) { return cmf_replace_content_file_url(htmlspecialchars_decode($value)); } ~~~ PHP htmlspecialchars_decode() 函数 htmlspecialchars_decode() 函数是 htmlspecialchars() 函数的反函数。 htmlspecialchars_decode() 函数把一些预定义的 HTML 实体转换为字符。 > > 替换编辑器内容中的文件地址 > @param string $content 编辑器内容 > @param boolean $isForDbSave true:表示把绝对地址换成相对地址,用于数据库保存,false:表示把相对地址换成绝对地址用于界面显示 > @return string > > function cmf_replace_content_file_url($content, $isForDbSave = false) ~~~ public function setContentAttr($value) { $config = \HTMLPurifier_Config::createDefault(); if (!file_exists(RUNTIME_PATH . 'HTMLPurifier_DefinitionCache_Serializer')) { mkdir(RUNTIME_PATH . 'HTMLPurifier_DefinitionCache_Serializer'); } $config->set('Cache.SerializerPath', RUNTIME_PATH . 'HTMLPurifier_DefinitionCache_Serializer'); $purifier = new \HTMLPurifier($config); $cleanHtml = $purifier->purify(cmf_replace_content_file_url(htmlspecialchars_decode($value), true)); return htmlspecialchars($cleanHtml); } ~~~ Cache.SerializerPath是 PHP富文本HTML过滤器(HTMLPurifier HTML)的一个配置参数 作用是存储没有斜杠的,被序列化的绝对路径 htmlspecialchars php函数 把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体