首先看完整代码 然后分部分解释
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 实体
- php套路
- 套路之类结构
- thinkphp分块解析之Collection
- thinkphp基础之collection
- Collection在thinkphp中的运用
- thinkcmf模块分析
- Controller按界面点击顺序排列表
- user模块-Controller分析
- portal模块-Controller分析
- admin模块-Controller分析
- user模块-脑图
- portal模块-脑图
- admin模块-脑图
- cmf公共函数解析-common.php
- thinkcmf点滴记录
- 自定义标签详解
- 插件
- 系统信息插件
- 插件演示插件
- 留言板插件
- 留言板1 建立胚胎
- 留言板1-1 数据库变化
- 留言板1-2 自定义钩子
- 留言板2 连接数据库
- 留言板3 读取后台界面数据
- 留言板4 前端模板
- 留言板5 分离cssjs文件
- 留言板6 验证
- 留言板7 图形验证码
- 留言板8 后台留言列表页
- 留言板9 后记
- 评论插件
- 1 分析数据表
- 2 CommentModel.php
- 3 UserModel.php
- 4 DCommentPlugin.php
- 前端调用代码
- 喜欢插件
- 1 分析
- 2 收藏功能
- 3 插件建模
- 4 数据库设计
- 5 插入一条数据
- 多语言
- thinkphp多语言
- thinkcmf多语言